Capistrano

php( laravel, wordpress)

Attention

ce tuto part du principe que tout les utilistateurs sont admin,

donc les accès (clés ssh,etc) sont uniquement pour les personnes

RESPONSABLES de TOUTES les apps

Setup base

Création d'un utilisateur

adduser deploy /*creation de l'utilistaur deploy */

si l'utilisateur a besoin des droits sudo

usermod -aG sudo deploy /* ajout droit sudo */
/* ne pas demander le mot de passe pour acceder au sudo : */
sudo visudo
/*ajout de la ligne : */
deploy ALL=(ALL) NOPASSWD: ALL

Ajout des clés ssh

sudo nano /home/deploy/.ssh/authorized_keys 
/* collez y les clés ssh pour le compte deploy */
/* si le dossier n'existe pas , il faut le créer : */ 
cd /home/deploy && mkdir .ssh 

/* ajout des clés ssh pour l'utilisateur root /*

sudo nano /root/.ssh/authorized_keys

=> n'hésitez pas à ne plus autoriser l'accès ssh par mot de passe :

sudo nano sudo nano /etc/ssh/sshd_config

/*
et changez a la ligne : */
#PasswordAuthentication yes
en 
PasswordAuthentication no

setup serveur php

ssh deploy@xxx.xxx.xxx.xxx

Terminal connecté sur

Installation de php

sudo -s
apt-get update
apt-get install software-properties-common
apt-get install python-software-properties
apt-get update
apt-get -y install unzip zip nginx php7.2 php7.2-mysql php7.2-fpm
apt-get -y install php7.2-mbstring php7.2-xml php7.2-curl
/* install nginx */
apt-get -y install nginx
/* mariadb (mysql ) */
apt-get -y install mysql-client mysql-server
mysql_secure_installation
/* installation de composer */
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
chmod +x /usr/local/bin/composer

mysql !

sudo -s
mysql -u <login>


mysql> CREATE DATABASE laravel;
mysql> GRANT ALL ON laravel.* to 'laravel'@'localhost' IDENTIFIED BY 'secret_password';
mysql> FLUSH PRIVILEGES;
mysql> quit

/* creation de la base de donnee "laravel"
creation de l'utilisateur laravel avec le mot de passe "secet_password"
=> les noms sont à changer :-) 

Le serveur est prêt

(!! pas encore sécurisé !!)

setup serveur ruby

ssh deploy@xxx.xxx.xxx.xxx

Terminal connecté sur

installation de ruby

gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

\curl -sSL https://get.rvm.io | bash

ruby install <version> /* 2.5.1 */
ruby use <version>

installer ruby grâce à rvm

Fonctionnement
d'un serveur web

Capistrano

capistrano deploy !

capistrano s'occupe

  • d'envoyer des ordres au serveur
  • de créer les dossiers pour chaque  version
  • de lancer des taches

Nginx

http://xxxxxxxx.xxxx

Nginx, (pour vulgariser) permet de router, les requêtes des clients , de mettre en cache,=> c'est un serveur http .

 

Le serveur

Serveur PHP,PUMA

Text

php fpm

nodemon 

Puma

php fpm

Analyse des dossiers

structure :-)

deploy@vps208143:~$ tree -d apps/ -L 2
apps/
├── current -> /home/deploy/apps/releases/20181017145548
├── releases
│   ├── 20181013150102
│   ├── 20181013150140
│   └── 20181017145548
├── repo
│   ├── branches
│   ├── hooks
│   ├── info
│   ├── objects
│   └── refs
└── shared
    ├── admin
    ├── framework
    └── storage

15 directories

lien symb. vers la release en prod

Les releases de sauvetage pour roll-back

Une copie du git

Le dossier partagé entre plusieurs releases

Le dossier shared

pour faire simple, ce dossier permet de créer des fichiers persistants entre chaque déploiement .

celui-ci "écrases" les autres fichiers (!! si config !! )

 

deploy@vps208143:~/apps/shared$ tree -L 3
.
├── admin
│   ├── wp-config.php
│   └── wp-content
│       └── uploads
├── framework
│   ├── cache
│   └── views
└── storage
    ├── app
    │   └── public
    ├── debugbar
    ├── framework
    │   ├── cache
    │   ├── sessions
    │   ├── testing
    │   └── views
    └── logs
        └── laravel.log

16 directories, 41 files
deploy@vps208143:~/apps/current$ tree -L 2 -d
.
├── admin
│   ├── wp-admin
│   ├── wp-content
│   └── wp-includes
├── app
│   ├── Console
│   ├── Exceptions
│   ├── Http
│   └── Providers
├── bootstrap
│   └── cache
├── config
│   └── deploy
├── database
│   ├── factories
│   ├── migrations
│   └── seeds
├── lib
│   └── capistrano
├── log
├── public
│   ├── css
│   ├── fonts
│   ├── images
│   └── js
├── resources
│   ├── assets
│   ├── lang
│   └── views
├── routes
├── storage -> /home/deploy/apps/shared/storage
├── tests
│   ├── Feature
│   └── Unit
└── vendor
    ├── ....
76 directories

config de capistrano

installation

gem install capistrano /* en global */
/* ou */
bundle install 

cap install

fichiers locaux

├── Capfile
├── config
│   ├── deploy
│   │   ├── production.rb
│   │   └── staging.rb
│   └── deploy.rb
└── lib
    └── capistrano
            └── tasks

fichiers avec config de ce projet

URLS des serveurs

Toute les tâches

Analyse des fichiers de

ello

config de nginx

Installation

sudo apt-get update
sudo apt-get install -y nginx

rm /etc/nginx/sites-enabled/default

Fonctionnement

chaque fichiers qui se trouvent dans "sites-enabled" sont chargés par nginx.(et concaténés )

=> les configurations possibles de nginx sont infinies : virtual host,mise en cache, load balancing,etc

Analyse du fichier nginx de ello

Utilisation

déploiement

git add .
git commit -m "votre commit"
git push <repo> master

cap production deploy /* cap <env> deploy */
/* faire une tache précise */
cap <env> namespace:tache 
cap production deploy:restart 

/* test commande */ 
cap production deploy --dry-run
cap deploy                         # Deploy a new release
cap deploy:check                   # Check required files and directories e...
cap deploy:check:directories       # Check shared and release directories e...
cap deploy:check:linked_dirs       # Check directories to be linked exist i...
cap deploy:check:linked_files      # Check files to be linked exist in shared
cap deploy:check:make_linked_dirs  # Check directories of files to be linke...
cap deploy:cleanup                 # Clean up old releases
cap deploy:cleanup_rollback        # Remove and archive rolled-back release
cap deploy:finished                # Finished
cap deploy:finishing               # Finish the deployment, clean up server(s)
cap deploy:finishing_rollback      # Finish the rollback, clean up server(s)
cap deploy:log_revision            # Log details of the deploy
cap deploy:published               # Published
cap deploy:publishing              # Publish the release
cap deploy:revert_release          # Revert to previous release timestamp
cap deploy:reverted                # Reverted
cap deploy:reverting               # Revert server(s) to previous release
cap deploy:rollback                # Rollback to previous release
cap deploy:set_current_revision    # Place a REVISION file with the current...
cap deploy:started                 # Started
cap deploy:starting                # Start a deployment, make sure server(s...
cap deploy:symlink:linked_dirs     # Symlink linked directories
cap deploy:symlink:linked_files    # Symlink linked files
cap deploy:symlink:release         # Symlink release to current
cap deploy:symlink:shared          # Symlink files and directories from sha...
cap deploy:updated                 # Updated
cap deploy:updating                # Update server(s) by setting up a new r...
cap doctor                         # Display a Capistrano troubleshooting r...
cap doctor:environment             # Display Ruby environment details
cap doctor:gems                    # Display Capistrano gem versions
cap doctor:servers                 # Display the effective servers configur...
cap doctor:variables               # Display the values of all Capistrano v...
cap git:check                      # Check that the repository is reachable
cap git:clone                      # Clone the repo to the cache
cap git:create_release             # Copy repo to releases
cap git:set_current_revision       # Determine the revision that will be de...
cap git:update                     # Update the repo mirror to reflect the ...
cap git:wrapper                    # Upload the git wrapper script, this sc...
cap install                        # Install Capistrano, cap install STAGES...
cap laravel:cache                  # vider cache
cap laravel:composer               # charger composer
cap laravel:migrate                # migration
cap laravel:permission             # permission démarrage
cap laravel:permissionfin          # permission fin
cap laravel:reset                  # reset db
                                                         

NB

si nécessaire n'hésitez pas à rajouter des taches

Logs

/* Logs par défaut */

tail -f /var/log/nginx/error.log
tail -f /var/log/nginx/access.log
tail -f /var/log/auth.log /* accès ssh */
tail -f /var/log/fail2ban.log /*si fail2ban */

/* logs système !!indigeste :-) !! */
tail -f /var/log/syslogs

N'oubliez pas, qu'en fonction de votre configuration, les logs peuvent changer d'endroit ou être splitter en fonction des requêtes

SSL

http

http danger

https

setup ssl nginx

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-nginx
/* nginx doit déjà être configuré avec les noms de domaines 
conf de nginx : 
. . .
server_name example.com www.example.com;
. . .

*/

/* creer + parametrer nginx */
sudo certbot --nginx -d example.com -d www.example.com

Mises à jours

MaJ auto.

solution

"unattended upgrade "

Sécurité

(le minima)

Firewall

Un firewall bloque les requêtes vers des ports non-utiles qui risquent de ne pas être sécurisé

Firewall

Exemple

Firewall

mise en place

sudo -s
apt-get install ufw

ufw default deny incoming
ufw default allow outgoing

ufw allow <port> /*(tcp and udp) */ 
ufw allow <port>/<prot> /*(tcp or udp) */

Firewall

activation

ATTENTION A NE PAS VOUS ENFERMER DEHORS

sudo ufw enable

fail2ban

Bannir des IP avec fail2ban. fail2ban est une application qui analyse les logs de divers services (SSH, Apache, FTP …) en cherchant des correspondances entre des motifs définis dans ses filtres et les entrées des logs. Lorsqu'une correspondance est trouvée une ou plusieurs actions sont exécutées

fail2ban

installation

sudo apt-get update
sudo apt-get install -y fail2ban

cp /etc/fail2ban/jail.conf  /etc/fail2ban/jail.local

fail2ban

configuration



sudo nano /etc/fail2ban/jail.local

sudo service fail2ban restart

Il existe de très nombreux tutos qui expliquent comment configurer fail2ban

Made with Slides.com