美文网首页
PHP开发 之 编译安装

PHP开发 之 编译安装

作者: 诺之林 | 来源:发表于2020-03-28 18:41 被阅读0次

本文的示例代码参考env-php

目录

Vagrant

vim Vagrantfile
Vagrant.configure("2") do |config|
    config.vm.box = "ubuntu/xenial64"
    config.vm.host_name = "web"
    config.vm.network "private_network", ip: "192.168.56.200"
    config.vm.provider "virtualbox" do |vb|
        vb.name = "web"
        vb.cpus = "1" 
        vb.memory = "1500"
    end
    config.vm.provision "file", source: "~/.ssh/id_rsa.pub", destination: "~/.ssh/id_rsa.pub"
    config.vm.provision "shell", inline: <<-SHELL
        cat /home/vagrant/.ssh/id_rsa.pub >> /home/vagrant/.ssh/authorized_keys
    SHELL
end
vagrant up

ssh vagrant@192.168.56.200

关于Vargrant更多介绍 可以参考Vagrant简介

Ansible

vim Pipfile
[[source]]
verify_ssl = true
url = "https://mirrors.aliyun.com/pypi/simple"
name = "pypi"

[requires]
python_version = "3.7"

[packages]
ansible = "*"

[dev-packages]
pipenv install

pipenv run ansible --version

关于Ansible更多介绍 可以参考Ansible简介

Prepare

  • .gitignore
gi python >> .gitignore

echo '.vagrant' >> .gitignore

echo '*.log' >> .gitignore
  • inventory
mkdir inventory

vim inventory/hosts
[vagrant]
web ansible_host=192.168.56.200
  • config
vim ansible.cfg
[defaults]
inventory = ./inventory/hosts
private_key_file = ~/.ssh/id_rsa
host_key_checking = False
pipenv run ansible vagrant -u vagrant -m command -a 'hostname'
# web | CHANGED | rc=0 >>
# web

Role

pipenv run ansible-galaxy init init --init-path=roles
vim roles/init/tasks/main.yml
---
- name: update source list
  copy:
    src: sources.list
    dest: /etc/apt/sources.list
    owner: root
    group: root
    mode: 0644
- name: add user
  user:
    name: "{{ ops_user['name'] }}"
    groups: sudo
    state: present
    createhome: yes
- name: add sudoer
  template:
    src: sudoers.j2
    dest: /etc/sudoers.d/{{ ops_user['name'] }}
    validate: 'visudo -cf %s'
    mode: 0440
- name: add authorized key
  authorized_key:
    user: "{{ ops_user['name'] }}"
    key: "{{item}}"
  with_file:
    - ~/.ssh/id_rsa.pub
- name: create site dir
  file:
    path: "{{ ops_user['site_dir'] }}"
    state: directory
    owner: "{{ ops_user['name'] }}"
    group: "{{ ops_user['name'] }}"
    mode: 0755
- name: create service dir
  file:
    path: "{{ ops_user['service_dir'] }}"
    state: directory
    owner: "{{ ops_user['name'] }}"
    group: "{{ ops_user['name'] }}"
    mode: 0755
vim roles/init/files/sources.list
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse
vim roles/init/templates/sudoers.j2
{{ ops_user['name'] }} ALL=(ALL) NOPASSWD:ALL
vim roles/init/vars/main.yml
---
ops_user:
  name: op
  site_dir: /opt/sites
  service_dir: /opt/services

Playbook

vim web.yml
---
- name: playbook web
  hosts: "{{ variable_host | default('vagrant') }}"
  roles:
    - role: init
      tags: init
      become: yes
pipenv run ansible-playbook web.yml --list-tasks

pipenv run ansible-playbook web.yml -u vagrant

Vars

mkdir group_vars

vim group_vars/vagrant.yml
---
ops_user:
  name: op
  site_dir: /opt/sites
  service_dir: /opt/services
vim roles/init/vars/main.yml
---
# vars file for init

PHP

mkdir group_vars

vim group_vars/vagrant.yml
---
ops_user:
  name: op
  site_dir: /opt/sites
  service_dir: /opt/services
php:
  version: 7.1.30
pipenv run ansible-galaxy init php --init-path=roles
vim roles/php/tasks/main.yml
---
- name: download tar - php
  get_url:
    url: "https://mirrors.sohu.com/php/php-{{ php['version'] }}.tar.gz"
    dest: "{{ ops_user['service_dir'] }}"
- name: unarchive tar - php
  unarchive:
    src: "{{ ops_user['service_dir'] }}/php-{{ php['version'] }}.tar.gz"
    dest: "{{ ops_user['service_dir'] }}"
    copy: no
- name: apt install - php
  become: yes
  apt: pkg={{ item }} update_cache=yes cache_valid_time=3600
  with_items:
    - build-essential
    - libxml2-dev
    - openssl
    - libssl-dev
    - libcurl4-openssl-dev
    - pkg-config
    - libbz2-dev
    - libmcrypt-dev
    - libpng-dev
    - libjpeg-dev
    - libmagickwand-dev
    - libmagickcore-dev
    - libfreetype6-dev
    - libreadline-dev
    - libxslt-dev
- name: configure - php
  args:
    chdir: "{{ ops_user['service_dir'] }}/php-{{ php['version'] }}"
  command: "./configure --prefix={{ ops_user['service_dir'] }}/php \
    --with-config-file-path={{ ops_user['service_dir'] }}/php/etc \
    --with-openssl \
    --with-kerberos \
    --with-xmlrpc \
    --with-mysql-sock \
    --with-mysqli \
    --with-mcrypt \
    --with-mhash \
    --with-pcre-regex \
    --with-zlib \
    --with-iconv \
    --with-bz2 \
    --with-curl \
    --with-cdb \
    --with-pcre-dir \
    --with-gd \
    --with-jpeg-dir \
    --with-png-dir \
    --with-zlib-dir \
    --with-freetype-dir \
    --with-gettext \
    --with-libmbfl \
    --with-onig \
    --with-pdo-mysql \
    --with-pdo-sqlite \
    --with-readline \
    --with-libxml-dir \
    --with-xsl \
    --with-pear \
    --enable-fpm  \
    --enable-cgi \
    --enable-soap \
    --enable-bcmath \
    --enable-calendar \
    --enable-dom \
    --enable-exif \
    --enable-fileinfo \
    --enable-filter \
    --enable-ftp \
    --enable-gd-native-ttf \
    --enable-gd-jis-conv \
    --enable-json \
    --enable-mbstring \
    --enable-mbregex \
    --enable-mbregex-backtrack \
    --enable-pdo \
    --enable-session \
    --enable-shmop \
    --enable-simplexml \
    --enable-sockets \
    --enable-sysvmsg \
    --enable-sysvsem \
    --enable-sysvshm \
    --enable-wddx \
    --enable-zip \
    --enable-mysqlnd-compression-support \
    --enable-libxml \
    --enable-inline-optimization \
    --enable-opcache \
    --enable-pcntl \
    --enable-xml \
    --enable-intl"
- name: make - php
  make:
    chdir: "{{ ops_user['service_dir'] }}/php-{{ php['version'] }}"
- name: make install - php
  make:
    chdir: "{{ ops_user['service_dir'] }}/php-{{ php['version'] }}"
    target: install
- name: copy php.ini - php
  copy:
    remote_src: yes
    src: "{{ ops_user['service_dir'] }}/php-{{ php['version'] }}/php.ini-production"
    dest: "{{ ops_user['service_dir'] }}/php/etc/php.ini"
- name: config php.ini - php
  command: "sed -i 's%;date.timezone =%date.timezone = \"Asia/Shanghai\"%g' {{ ops_user['service_dir'] }}/php/etc/php.ini"
- name: copy php-fpm.conf - php
  copy:
    remote_src: yes
    src: "{{ ops_user['service_dir'] }}/php/etc/php-fpm.conf.default"
    dest: "{{ ops_user['service_dir'] }}/php/etc/php-fpm.conf"
- name: config php-fpm.conf - php
  command: "sed -i 's%;pid = run%pid = run%g' {{ ops_user['service_dir'] }}/php/etc/php-fpm.conf"
- name: copy www.conf - php
  copy:
    remote_src: yes
    src: "{{ ops_user['service_dir'] }}/php/etc/php-fpm.d/www.conf.default"
    dest: "{{ ops_user['service_dir'] }}/php/etc/php-fpm.d/www.conf"
- name: config www.conf - php
  command: "{{item}}"
  with_items:
    - "sed -i 's%listen = 127.0.0.1:9000%listen = var/run/php-fpm.sock%g' {{ ops_user['service_dir'] }}/php/etc/php-fpm.d/www.conf"
    - "sed -i 's%;listen.mode = 0660%listen.mode = 0666%g' {{ ops_user['service_dir'] }}/php/etc/php-fpm.d/www.conf"
- name: copy init.d.php-fpm - php
  become: yes
  copy:
    remote_src: yes
    src: "{{ ops_user['service_dir'] }}/php-{{ php['version'] }}/sapi/fpm/init.d.php-fpm"
    dest: /etc/init.d/php-fpm
    mode: 0755
- name: link bin/php - php
  become: yes
  file:
   src: "{{ ops_user['service_dir'] }}/php/bin/php"
   dest: /usr/bin/php
   state: link
vim web.yml
---
- name: playbook web
  hosts: "{{ variable_host | default('vagrant') }}"
  roles:
    - role: init
      tags: init
      become: yes
    - role: php
      tags: php
      remote_user: "{{ ops_user['name'] }}"
pipenv run ansible-playbook web.yml --list-tasks

pipenv run ansible-playbook web.yml -u vagrant

Handlers

vim roles/php/tasks/main.yml
- name: copy init.d.php-fpm - php
  become: yes
  copy:
    remote_src: yes
    src: "{{ ops_user['service_dir'] }}/php-{{ php['version'] }}/sapi/fpm/init.d.php-fpm"
    dest: /etc/init.d/php-fpm
    mode: 0755
  notify: start php-fpm
vim roles/php/handlers/main.yml
---
- name: start php-fpm
  command: /etc/init.d/php-fpm start

Files

vim roles/php/tasks/main.yml
- name: copy composer
  become: yes
  copy:
    src: composer
    dest: /usr/bin/composer
    owner: "{{ ops_user['name'] }}"
    group: "{{ ops_user['name'] }}"
    mode: 0755
  notify: update composer source
vim roles/php/handlers/main.yml
- name: update composer source
  command: composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

References

cd /opt/sites

composer create-project laravel/laravel laravel-test --prefer-dist "5.5.*" && cd laravel-test

php artisan serve
sudo apt install -y nginx

sudo vim /etc/nginx/sites-enabled/test.conf
server {
    listen 80;
    server_name 192.168.56.200.xip.io;

    location / {
        include fastcgi_params;
        fastcgi_pass unix:/opt/services/php/var/run/php-fpm.sock;
        fastcgi_param SCRIPT_FILENAME /opt/sites/laravel-test/public/index.php;
    }
}
sudo nginx -t

sudo nginx -s reload

相关文章

网友评论

      本文标题:PHP开发 之 编译安装

      本文链接:https://www.haomeiwen.com/subject/xvxsuhtx.html