Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/melihovv/initial-webserver-setup
Ansible playbook for initial ubuntu 16.04 webserver setup and Laravel zero time deployment
https://github.com/melihovv/initial-webserver-setup
ansible ansible-playbook ansible-roles ansible-vault laravel playbook webserver
Last synced: 26 days ago
JSON representation
Ansible playbook for initial ubuntu 16.04 webserver setup and Laravel zero time deployment
- Host: GitHub
- URL: https://github.com/melihovv/initial-webserver-setup
- Owner: melihovv
- Created: 2017-07-23T15:48:56.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2021-07-18T10:48:10.000Z (over 3 years ago)
- Last Synced: 2024-09-30T17:42:03.898Z (about 1 month ago)
- Topics: ansible, ansible-playbook, ansible-roles, ansible-vault, laravel, playbook, webserver
- Language: Jinja
- Homepage: https://medium.com/@melihovv/zero-time-deploy-of-laravel-project-with-ansible-3235816676bb
- Size: 94.7 KB
- Stars: 58
- Watchers: 7
- Forks: 26
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Initial Ubuntu 16.04 Web Server Setup
Ansible playbook to setup web server and playbook to deploy laravel project with
zero time.## What initial-setup.yml playbook does
- install python2 and aptitude
- upgrade all software
- create user with sudo rights
- configure sshd: disables root login and password authentication, also allows
to login only user created on previous step## What setup.yml playbook does
- install
- git
- ntp
- vim
- tmux
- htop
- curl
- unzip
- configure automatic security updates (do not reloads server, only installs updates)
- setup timezone
- configure iptables and fail2ban
- create swap file
- setup ssl certificate with letsencrypt
- install node.js, npm and yarn
- install nginx
- install php and composer
- install mysql
- creates following folders structure for zero time deployment:
- `/path/to/domain`
- `current` -> `/link/to/latest/release`
- `persistent`
- `storage`
- `releases`
- `2017-08-10-10-00-00`
- `2017-08-11-10-00-00`
- `2017-08-12-10-00-00`## What deploy.yml playbook does
- clone repository
- set correct permissions
- link `/path/to/release/storage` to `/path/to/domain/persistent/storage`
- install composer dependencies
- link `/path/to/release/.env` to `/path/to/domain/persistent/.env`
- install npm dependencies and generate assets
- optimize laravel application
- backup database
- run new migrations
- link `/path/to/domain/current` to `/path/to/domain/releases/new-release`
- delete all, but 10 latest releasesIf build fails
- rollback migrations
- remove new release folder
- link `/path/to/domain/current` to `/path/to/domain/releases/last-success-release`## Install
### Inventory file
Create `inventory` file in project root. You should specify ip address of your
server in this file.```
[web]
46.101.210.137
```### Install dependencies
```bash
ansible-galaxy install -r requirements.yml
```### Environment variables
Copy `vars/main.yml.example` to `vars/main.yml` and change variable values for
your needs. For security reasons you may want to encrypt this file using
ansible-vault:
```bash
ansible-vault encrypt vars/main.yml
```
And then edit this file
with
```bash
ansible-vault edit vars/main.yml
```To see all available variables take a look at `roles/*/defaults/main.yml`. Also
visit external roles github page for additional documentation.To generate password for your user use
```bash
sudo apt-get install -y whois
mkpasswd --method=SHA-512
```### Nginx and php-fpm configs
- Site config for nginx place in `roles/nginx/templates/yoursite.j2`
- Php-fpm pool config place in `roles/php/templates/yoursite.conf.j2`
- Default configs are available in this
[gist](https://gist.github.com/melihovv/ff11a76ee8b4fba28ecb4b681cb91818)### Initial setup
By default on ubuntu 16.04 there is no python 2 and aptitude. Without those
programs ansible cannot work. To fix it run:```bash
ansible-playbook initial-setup.yml
```Beside it this playbook also creates user and configures ssh server.
### Provision server
This playbook setup nginx, php-fpm, mysql, nodejs, etc.
```bash
ansible-playbook setup.yml
```### To run only specific roles
```bash
ansible-playbook setup.yml --tags=user,nginx
```### To exclude specific roles
```bash
ansible-playbook setup.yml --skip-tags=user,nginx
```### Deploy
```bash
ansible-playbook deploy.yml
```## Security
If you discover any security related issues, please email [email protected] instead of using the issue tracker.
## Credits
- [Alexander Melihov](https://github.com/melihovv)
- [All contributors](https://github.com/melihovv/initial-webserver-setup/graphs/contributors)