diff --git a/.gitignore b/.gitignore index e7ad56a7b1..e47e773fd0 100755 --- a/.gitignore +++ b/.gitignore @@ -52,6 +52,8 @@ tests/_support/_generated/* *.cache .vagrant +*.log +*.retry \.php_cs\.dist diff --git a/Vagrantfile b/Vagrantfile index 0c5f8798a6..27efef7b1a 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -8,25 +8,34 @@ Vagrant.configure("2") do |config| config.vm.define "bionic" do |bionic| bionic.vm.box = "ubuntu/bionic64" bionic.vm.hostname = 'bionic' - bionic.vm.network "public_network", bridge: NETWORK_BRIDGE - bionic.vm.provision :shell, :inline => "wget #{SNIPEIT_SH_URL}" - bionic.vm.provision :shell, :inline => "chmod 755 snipeit.sh" + bionic.vm.network "forwarded_port", guest: 80, host: 8080 + bionic.vm.synced_folder ".", "/vagrant", :owner => 'www-data', + :group => 'vagrant', :mount_options => ['dmode=775', 'fmode=775'] + bionic.vm.provision "ansible_local" do |ansible| + ansible.playbook = "ansible/ubuntu/vagrant_playbook.yml" + end end config.vm.define "xenial" do |xenial| xenial.vm.box = "ubuntu/xenial64" xenial.vm.hostname = 'xenial' - xenial.vm.network "public_network", bridge: NETWORK_BRIDGE - xenial.vm.provision :shell, :inline => "wget #{SNIPEIT_SH_URL}" - xenial.vm.provision :shell, :inline => "chmod 755 snipeit.sh" + xenial.vm.network "forwarded_port", guest: 80, host: 8080 + xenial.vm.synced_folder ".", "/vagrant", :owner => 'www-data', + :group => 'vagrant', :mount_options => ['dmode=775', 'fmode=775'] + xenial.vm.provision "ansible_local" do |ansible| + ansible.playbook = "ansible/ubuntu/vagrant_playbook.yml" + end end config.vm.define "trusty" do |trusty| trusty.vm.box = "ubuntu/trusty32" trusty.vm.hostname = 'trusty' - trusty.vm.network "public_network", bridge: NETWORK_BRIDGE - trusty.vm.provision :shell, :inline => "wget #{SNIPEIT_SH_URL}" - trusty.vm.provision :shell, :inline => "chmod 755 snipeit.sh" + trusty.vm.network "forwarded_port", guest: 80, host: 8080 + trusty.vm.synced_folder ".", "/vagrant", :owner => 'www-data', + :group => 'vagrant', :mount_options => ['dmode=775', 'fmode=775'] + trusty.vm.provision "ansible_local" do |ansible| + ansible.playbook = "ansible/ubuntu/vagrant_playbook.yml" + end end config.vm.define "centos7" do |centos7| diff --git a/ansible/ubuntu/apachevirtualhost.conf.j2 b/ansible/ubuntu/apachevirtualhost.conf.j2 new file mode 100755 index 0000000000..c555ad9db7 --- /dev/null +++ b/ansible/ubuntu/apachevirtualhost.conf.j2 @@ -0,0 +1,10 @@ + + + Allow From All + AllowOverride All + Options -Indexes + + + DocumentRoot {{ app_path }}/public + ServerName {{ fqdn }} + diff --git a/ansible/ubuntu/vagrant_playbook.yml b/ansible/ubuntu/vagrant_playbook.yml new file mode 100755 index 0000000000..dd25b2e0c2 --- /dev/null +++ b/ansible/ubuntu/vagrant_playbook.yml @@ -0,0 +1,226 @@ +--- +- name: Set up local server + hosts: all + remote_user: vagrant + become_user: root + become_method: sudo + vars: + app_path: "/var/www/snipeit" + fqdn: "localhost" + tasks: + - name: Update and upgrade existing apt packages + become: true + apt: + upgrade: yes + update_cache: yes + - name: Install Utilities + become: true + apt: + name: "{{ packages }}" + state: present + vars: + packages: + - nano + - vim + - name: Installing Apache httpd, PHP, MariaDB and other requirements. + become: true + apt: + name: "{{ packages }}" + state: present + vars: + packages: + - mariadb-client + - php + - php-curl + - php-mysql + - php-gd + - php-ldap + - php-zip + - php-mbstring + - php-xml + - php-bcmath + - curl + - git + - unzip + - python-pymysql + # + # Install the lastest version of composer + # + - name: Composer check + stat: + path: /usr/local/bin/composer + register: composer_exits + - name: Install Composer + shell: | + EXPECTED_SIGNATURE=$(wget -q -O - https://composer.github.io/installer.sig) + php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" + ACTUAL_SIGNATURE=$(php -r "echo hash_file('SHA384', 'composer-setup.php');") + + if [ "$EXPECTED_SIGNATURE" != "$ACTUAL_SIGNATURE" ] + then + >&2 echo 'ERROR: Invalid installer signature' + rm composer-setup.php + exit 1 + fi + + php composer-setup.php --quiet + RESULT=$? + rm composer-setup.php + mv composer.phar /usr/local/bin/composer + exit $RESULT + when: not composer_exits.stat.exists + args: + creates: /usr/local/bin/composer + become: true + # + # Install and Configure MariaDB + # + - name: Install MariaDB + become: true + apt: + name: mariadb-server + state: present + register: sql_server + - name: Start and Enable MySQL server + become: true + systemd: + state: started + enabled: yes + name: mariadb + - name: Create Vagrant mysql password + become: true + mysql_user: + name: vagrant + password: vagrant + login_unix_socket: /var/run/mysqld/mysqld.sock + priv: "*.*:ALL" + state: present + - name: Enable remote mysql + replace: + path: /etc/mysql/mariadb.conf.d/50-server.cnf + regexp: "127.0.0.1" + replace: "0.0.0.0" + become: true + notify: + - restart mysql + - name: Create snipeit database + become: true + mysql_db: + name: snipeit + state: present + login_unix_socket: /var/run/mysqld/mysqld.sock + # + # Install Apache Web Server + # + - name: Install Apache 2.4 + apt: + name: "{{ packages }}" + state: present + vars: + packages: + - apache2 + - libapache2-mod-php + become: true + register: apache2_server + - name: Start and Enable Apache2 Server + become: true + systemd: + name: apache2 + state: started + enabled: yes + #- name: Disable Apache modules + # become: true + # apache2_module: + # state: absent + # name: "{{ item }}" + # with_items: + # #- mpm_prefork + # notify: + # - restart apache2 + - name: Enable Apache modules + become: true + apache2_module: + state: present + name: "{{ item }}" + with_items: + - rewrite + - vhost_alias + - deflate + - expires + - proxy_fcgi + - proxy + notify: + - restart apache2 + - name: Install Apache VirtualHost File + become: true + template: + src: apachevirtualhost.conf.j2 + dest: "/etc/apache2/sites-available/snipeit.conf" + - name: Enable VirtualHost + become: true + command: a2ensite snipeit + args: + creates: /etc/apache2/sites-enabled/snipeit.conf + notify: + - restart apache2 + - name: Map apache dir to local folder + become: true + file: + src: /vagrant + dest: "{{ app_path }}" + state: link + notify: + - restart apache2 + # + # Install dependencies from composer + # + - name: Install dependencies from composer + composer: + command: install + working_dir: "{{ app_path }}" + notify: + - restart apache2 + # + # Configure .env file + # + - name: Copy .env file + copy: + src: "{{ app_path }}/.env.example" + dest: "{{ app_path }}/.env" + - name: Configure .env file + lineinfile: + path: "{{ app_path }}/.env" + regexp: "{{ item.regexp }}" + line: "{{ item.line }}" + with_items: + - { regexp: '^DB_HOST=', line: 'DB_HOST=127.0.0.1'} + - { regexp: '^DB_DATABASE=', line: 'DB_DATABASE=snipeit' } + - { regexp: '^DB_USERNAME=', line: 'DB_USERNAME=vagrant' } + - { regexp: '^DB_PASSWORD=', line: 'DB_PASSWORD=vagrant' } + - { regexp: '^APP_URL=', line: "APP_URL=http://{{ fqdn }}" } + - { regexp: '^APP_ENV=', line: "APP_ENV=development" } + - { regexp: '^APP_DEBUG=', line: "APP_ENV=true" } + - name: Generate application key + shell: "php {{ app_path }}/artisan key:generate --force" + - name: Artisan Migrate + shell: "php {{ app_path }}/artisan migrate --force" + # + # Create Cron Job + # + - name: Create scheduler cron job + become: true + cron: + name: "Snipe-IT Artisan Scheduler" + job: "/usr/bin/php {{ app_path }}/artisan schedule:run" + handlers: + - name: restart apache2 + become: true + systemd: + name: apache2 + state: restarted + - name: restart mysql + become: true + systemd: + name: mysql + state: restarted +