From 148467026ad7f22e63b21bae9041c7af3ff00bff Mon Sep 17 00:00:00 2001 From: Ryan Lerch Date: Nov 03 2021 09:26:52 +0000 Subject: start setting up a vagrant dev environment This adds the beginnings of a Vagrant development environment, adding the setup, and installing and configuring discourse. Signed-off-by: Ryan Lerch --- diff --git a/.gitignore b/.gitignore index 10a375d..8ff48ad 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ dist discourse2fedmsg.egg-info *.pyc .venv +.vagrant # Tests .coverage diff --git a/Vagrantfile b/Vagrantfile new file mode 100644 index 0000000..469a90c --- /dev/null +++ b/Vagrantfile @@ -0,0 +1,29 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +Vagrant.configure(2) do |config| + config.hostmanager.enabled = true + config.hostmanager.manage_host = true + config.hostmanager.manage_guest = true + + config.vm.define "discourse2fedoramessaging" do |discourse2fedoramessaging| + discourse2fedoramessaging.vm.box_url = "https://download.fedoraproject.org/pub/fedora/linux/releases/34/Cloud/x86_64/images/Fedora-Cloud-Base-Vagrant-34-1.2.x86_64.vagrant-libvirt.box" + discourse2fedoramessaging.vm.box = "f34-cloud-libvirt" + discourse2fedoramessaging.vm.hostname = "discourse2fedoramessaging.test" + + discourse2fedoramessaging.vm.synced_folder '.', '/vagrant', disabled: true + discourse2fedoramessaging.vm.synced_folder ".", "/home/vagrant/discourse2fedoramessaging", type: "sshfs" + + discourse2fedoramessaging.vm.provider :libvirt do |libvirt| + libvirt.cpus = 2 + libvirt.memory = 4096 + end + + discourse2fedoramessaging.vm.provision "ansible" do |ansible| + ansible.playbook = "devel/ansible/discourse2fedoramessaging.yml" + ansible.config_file = "devel/ansible/ansible.cfg" + ansible.verbose = true + end + end + +end diff --git a/devel/ansible/ansible.cfg b/devel/ansible/ansible.cfg new file mode 100644 index 0000000..40a8115 --- /dev/null +++ b/devel/ansible/ansible.cfg @@ -0,0 +1,3 @@ +[defaults] +# Human-readable output +stdout_callback = yaml diff --git a/devel/ansible/discourse2fedoramessaging.yml b/devel/ansible/discourse2fedoramessaging.yml new file mode 100644 index 0000000..0b91bc7 --- /dev/null +++ b/devel/ansible/discourse2fedoramessaging.yml @@ -0,0 +1,6 @@ +--- +- hosts: discourse2fedoramessaging + become: true + become_method: sudo + roles: + - discourse2fedoramessaging diff --git a/devel/ansible/roles/discourse2fedoramessaging/files/.bashrc b/devel/ansible/roles/discourse2fedoramessaging/files/.bashrc new file mode 100644 index 0000000..b50fb3a --- /dev/null +++ b/devel/ansible/roles/discourse2fedoramessaging/files/.bashrc @@ -0,0 +1,11 @@ +# .bashrc + +export PATH="$HOME/.rbenv/bin:$PATH" +eval "$(rbenv init - --no-rehash)" + +#source /srv/venv/bin/activate + +#alias datanommer-consumer-start="sudo systemctl start datanommer.service && echo 'datanommer consumer is running'" +#alias datanommer-consumer-logs="sudo journalctl -u datanommer.service" +#alias datanommer-consumer-restart="sudo systemctl restart datanommer.service && echo 'datanommer consumer is running'" +#alias datanommer-consumer-stop="sudo systemctl stop datanommer.service && echo 'datanommer service stopped'" diff --git a/devel/ansible/roles/discourse2fedoramessaging/files/discourse.service b/devel/ansible/roles/discourse2fedoramessaging/files/discourse.service new file mode 100644 index 0000000..61f5058 --- /dev/null +++ b/devel/ansible/roles/discourse2fedoramessaging/files/discourse.service @@ -0,0 +1,14 @@ +[Unit] +Description=discourse + +[Service] +Environment=PATH=/home/vagrant/.rbenv/shims:/home/vagrant/.rbenv/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin: +Environment=UNICORN_BIND_ALL=1 +Environment=DISCOURSE_DEV_HOSTS=discourse2fedoramessaging.test +Environment=DISCOURSE_HOSTNAME=discourse2fedoramessaging.test +User=vagrant +WorkingDirectory=/home/vagrant/discourse +ExecStart=bundle exec rails server + +[Install] +WantedBy=multi-user.target diff --git a/devel/ansible/roles/discourse2fedoramessaging/files/emberjs.service b/devel/ansible/roles/discourse2fedoramessaging/files/emberjs.service new file mode 100644 index 0000000..78d7467 --- /dev/null +++ b/devel/ansible/roles/discourse2fedoramessaging/files/emberjs.service @@ -0,0 +1,11 @@ +[Unit] +Description=emberjs + +[Service] +Environment=PATH=/home/vagrant/.rbenv/shims:/home/vagrant/.rbenv/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin: +User=vagrant +WorkingDirectory=/home/vagrant/discourse +ExecStart=bash ruby /home/vagrant/discourse/bin/ember-cli + +[Install] +WantedBy=multi-user.target diff --git a/devel/ansible/roles/discourse2fedoramessaging/files/mailcatcher.service b/devel/ansible/roles/discourse2fedoramessaging/files/mailcatcher.service new file mode 100644 index 0000000..ef07742 --- /dev/null +++ b/devel/ansible/roles/discourse2fedoramessaging/files/mailcatcher.service @@ -0,0 +1,11 @@ +[Unit] +Description=mailcatcher + +[Service] +Environment=PATH=/home/vagrant/.rbenv/shims:/home/vagrant/.rbenv/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin: +User=vagrant +WorkingDirectory=/home/vagrant/discourse +ExecStart=bash mailcatcher -f --http-ip 0.0.0.0 + +[Install] +WantedBy=multi-user.target diff --git a/devel/ansible/roles/discourse2fedoramessaging/tasks/main.yml b/devel/ansible/roles/discourse2fedoramessaging/tasks/main.yml new file mode 100644 index 0000000..53d3da4 --- /dev/null +++ b/devel/ansible/roles/discourse2fedoramessaging/tasks/main.yml @@ -0,0 +1,222 @@ +--- +- name: Install RPM packages + dnf: + name: + - "@development-tools" + - git + - rpm-build + - zlib-devel + - ruby-devel + - readline-devel + - libpq-devel + - ImageMagick + - sqlite + - sqlite-devel + - nodejs + - npm + - curl + - gcc + - g++ + - bzip2 + - openssl-devel + - libyaml-devel + - libffi-devel + - zlib-devel + - gdbm-devel + - ncurses-devel + - optipng + - pngquant + - jhead + - jpegoptim + - gifsicle + - postgresql-server + - postgresql-contrib + - python3-psycopg2 + - redis + state: present + +- name: Install svgo with npm + community.general.npm: + name: svgo + global: yes + +- name: Install yarn with npm + community.general.npm: + name: yarn + global: yes + +- name: Setup the postgresql DB + command: postgresql-setup --initdb + args: + creates: /var/lib/pgsql/data/postgresql.conf + +- name: Start postgresql + service: + name: postgresql + enabled: yes + state: started + + +- block: + - name: Create the user + postgresql_user: + name: vagrant + password: password + role_attr_flags: CREATEDB,CREATEROLE,SUPERUSER + + become: yes + become_user: postgres + become_method: sudo + + +- name: Make connection easier + copy: + dest: /home/vagrant/.pgpass + content: "*:*:discourse_development:vagrant:password\n" + owner: vagrant + group: vagrant + mode: 0600 + + +- name: Start redis + service: + name: redis + enabled: yes + state: started + +- name: Install the .bashrc + copy: + src: .bashrc + dest: /home/vagrant/.bashrc + mode: 0644 + owner: vagrant + group: vagrant + +- name: checkout rbenv + ansible.builtin.git: + repo: 'https://github.com/rbenv/rbenv.git' + dest: /home/vagrant/.rbenv + become: yes + become_user: vagrant + + +- name: initialise rbenv + command: src/configure && make -C src && /home/vagrant/.rbenv/bin/rbenv init + args: + chdir: /home/vagrant/.rbenv + become: yes + become_user: vagrant + +- name: checkout ruby-build + ansible.builtin.git: + repo: 'https://github.com/rbenv/ruby-build.git' + dest: '/home/vagrant/.rbenv/plugins/ruby-build' + become: yes + become_user: vagrant + + +- name: rbenv install + command: '/home/vagrant/.rbenv/bin/rbenv install 2.7.1' + become: yes + become_user: vagrant + +- name: rbenv global + command: '/home/vagrant/.rbenv/bin/rbenv global 2.7.1' + become: yes + become_user: vagrant + +- name: rbenv rehash + command: '/home/vagrant/.rbenv/bin/rbenv rehash' + become: yes + become_user: vagrant + +- name: gem update + command: 'gem update --system' + become: yes + become_user: vagrant + +- name: install gems + command: 'gem install bundler mailcatcher rails' + become: yes + become_user: vagrant + +- name: checkout discourse + ansible.builtin.git: + repo: 'https://github.com/discourse/discourse.git' + dest: '/home/vagrant/discourse' + become: yes + become_user: vagrant + +- name: Install Discourse dependencies + command: bundle install + args: + chdir: /home/vagrant/discourse + become: yes + become_user: vagrant + +- name: create the DB + shell: bundle exec rake db:create + args: + chdir: /home/vagrant/discourse + become: yes + become_user: vagrant + +- name: migrate the DB + shell: bundle exec rake db:migrate + args: + chdir: /home/vagrant/discourse + become: yes + become_user: vagrant + +- name: test the migration + shell: RAILS_ENV=test bundle exec rake db:create db:migrate + args: + chdir: /home/vagrant/discourse + become: yes + become_user: vagrant + +- name: Install the systemd unit file for mailcatcher + copy: + src: "mailcatcher.service" + dest: /etc/systemd/system/mailcatcher.service + mode: 0644 + +- name: Start mailcatcher + systemd: + state: started + name: mailcatcher + daemon_reload: yes + enabled: yes + +- name: Install the systemd unit file for discourse + copy: + src: "discourse.service" + dest: /etc/systemd/system/discourse.service + mode: 0644 + +- name: Start discourse service using systemd + systemd: + state: started + name: discourse + daemon_reload: yes + enabled: yes + +- name: Install the systemd unit file for running ember-cli + copy: + src: "emberjs.service" + dest: /etc/systemd/system/emberjs.service + mode: 0644 + +- name: Start ember-cli service using systemd + systemd: + state: started + name: emberjs + daemon_reload: yes + enabled: yes + +- name: create an admin user + shell: RAILS_ENV=development bundle exec rake admin:invite[admin@example.test] + args: + chdir: /home/vagrant/discourse + become: yes + become_user: vagrant