在Ubuntu 14.04上使用Ansible部署PHP应用

Ansible在Ubuntu 14.04上部署PHP应用的实战指南 PHP应用部署是运维与开发协同的基础技术场景,其核心在于环境适配、自动化交付与安全加固。当目标系统受限于老旧发行版(如Ubuntu 14.04)时,传统容器化或新版本栈方案失效,此时Ansible凭借无代理、SSH原生支持、Python轻依赖等特性,成为遗产系统持续交付的关键工具。它绕过Docker内核限制,兼容mod_php与Apache经典架构,并可通过精准模块控制编译参数、权限策略与MySQL碎片优化。本文聚焦PHP与Ansible在冻结型生产环境中的深度协同,覆盖OPcache调优、图片上传权限治理 阅读详情

在Ubuntu 14.04上使用Ansible部署PHP应用

提供:ZStack社区

教程系列

本教程是《用Ansible自动化PHP部署》系列文章的第一篇。

前言

本教程介绍如何使用Ansible部署一个简单的PHP应用。到本文结束时,你将有一台搭建在VPS(云主机)上的Web服务器,上面运行着一个简单的PHP,而整个过程完全不需要你SSH到Web服务器所在的VPS敲命令。

我们的PHP应用使用的是Laravel框架。如果你用的是其他框架,整个操作过程其实也差不多。

准备工作

我们将使用Ansible在一个Ubuntu 14.04云主机上安装配置Nginx、PHP以及其他服务。你需要对Ansible有一定的了解。如果你对Ansible不太熟,可以先参阅这篇Ansible基础教程。

在开始操作之前,你需要满足如下条件:

  • 一台安装了Ubuntu 14.04的云主机,硬盘大小随意,需要有IP地址。本教程将使用your_server_ip指代这个IP地址。
  • 另一台安装了Ubuntu 14.04的云主机,将用于安装Ansible。整个登陆操作都将在这一台云主机上进行。
  • 两台云主机都设置了可以sudo的非root用户。
  • Ansible云主机上配置好SSH密钥。

步骤1:安装Ansible

Ansible的安装可以很简单的通过PPA来做。安装了相应的PPA后直接使用apt安装Ansible。

首先,用apt-add-repository命令添加ppa:

sudo apt-add-repository ppa:ansible/ansible

然后更新一下apt缓存:

sudo apt-get update

然后安装Ansible:

sudo apt-get install ansible

Ansible装好之后,创建一个新的目录,在里面做一些基本设置。Ansible默认使用的hosts文件位置在/etc/ansible/hosts,这里面列出了其管理的所有服务器。这个文件是全局性的,不是我们想要的;我们想要一个本地的,就需要自己创建。

我们直接在自己的工作目录下创建一个新的Ansible配置文件,这个文件会告诉Ansible在同一目录下查找hosts文件。

首先,创建一个新目录:

mkdir ~/ansible-php

进去:

cd ~/ansible-php/

创建一个ansible.cfg文件,用nano或者其他编辑器打开它:

nano ansible.cfg

在[defaults]组下添加一个hostfile配置选项,将该项赋值为hosts。简单来说就是把下面的内容复制到你的文件里:

ansible.cfg

[defaults]
hostfile = hosts

保存退出。然后,创建hosts文件。这里面将列出你要控制管理的PHP云主机的IP。

nano hosts

把下面的内容复制粘贴到hosts文件里。里面有一个php组,下面设置了你的服务器ipyour_server_ip以及你在这台PHP服务器上的非root用户名sammy(别忘了替换成你自己的IP和用户名):

hosts

[php]
your_server_ip ansible_ssh_user=sammy

保存退出。现在来做个简单的检查,看看Ansible是否能够连接到上面这个服务器。Ping一下php看看:

ansible php -m ping

如果你是第一次从本机登陆,可能会返回SSH认证的提示。SSH认证完成后,这次ping应该返回一个成功的结果,看起来差不多这样:

111.111.111.111 | success >> {
    "changed": false,
    "ping": "pong"
}

Ansible的安装配置这样就可以了。现在去设置我们的Web服务器。

步骤2:安装所需的软件包

我们将使用Ansible和apt来在Web服务器上安装一些系统软件包,包括git、nginx、sqlite3、mcrypt、以及一些php5-*的包。

在安装上述软件包之前,我们需要先创建一个简单的playbook。创建一个php.yml作为我们的playbook:

nano php.yml

把下面的配置内容复制粘贴进去。前两行设定了hosts组(php)以及运行该hosts组的默认权限sudo。下面的内容添加了我们所需要的软件包。如果你想要直接安装自己的应用,则可以修改这部分内容;如果你想先跟着我们安装我们的Laravel应用,则可以照单全收:

---
- hosts: php
  sudo: yes

  tasks:

  - name: install packages
    apt: name={{ item }} update_cache=yes state=latest
    with_items:
      - git
      - mcrypt
      - nginx
      - php5-cli
      - php5-curl
      - php5-fpm
      - php5-intl
      - php5-json
      - php5-mcrypt
      - php5-sqlite
      - sqlite3

保存退出。最后,运行ansible-playbook命令,该命令会在目标云主机上安装所有的软件包。如果你的目标云主机是通过密码登陆的,则需要在命令里包含--ask-sudo-pass选项。

ansible-playbook php.yml --ask-sudo-pass

步骤3:修改系统配置文件

本章将修改PHP云主机上的一些系统配置文件。最重要的一个配置(不包括Nginx的配置文件,Nginx将在下一章节中介绍)是php5-fpm的cgi.fix_pathinfo选项,因为这个选项的默认值会造成安全隐患。

我先简单介绍一下整个步骤,然后贴出整个php.yml以方便复制粘贴。

Lineinfile模块可用于确保配置的值完全符合我们的期待,这需要用到正则表达式让Ansible定位到我们想要修改的参数。修改之后,我们需要重启php5-fpm和nginx让配置生效,这需要用两个handler来实现。Handler很适合做此类任务,不仅因为它们精确的触发时机(任务变更时),而且因为它们在playbook的末尾执行,所以多个任务可以调用同一个handler,每一个handler仅会执行一次。

这部分内容看起来是这样的:

  - name: ensure php5-fpm cgi.fix_pathinfo=0
    lineinfile: dest=/etc/php5/fpm/php.ini regexp='^(.*)cgi.fix_pathinfo=' line=cgi.fix_pathinfo=0
    notify:
      - restart php5-fpm
      - restart nginx

  handlers:
    - name: restart php5-fpm
      service: name=php5-fpm state=restarted

    - name: restart nginx
      service: name=nginx state=restarted

注:Ansible 1.9.1版有一个bug,导致php5-fpm无法通过上面的service模块进行重启。临时的解决办法是改用shell命令,像这样:

    - name: restart php5-fpm
      shell: service php5-fpm restart

然后,我们需要确保php5-mcrypt模块处于开启状态(enabled)。这需要运行php5enmod脚本,检查20-mcrypt.ini文件是否在正确的位置。这里,我们的逻辑是让Ansible建立的任务尝试创建一个指定的文件,若文件已存在则不执行任务。

  - name: enable php5 mcrypt module
    shell: php5enmod mcrypt
    args:
      creates: /etc/php5/cli/conf.d/20-mcrypt.ini

就是这样。现在可以打开php.yml把上面的内容都粘贴进去了:

nano php.yml

整个文件现在看起来应该是这样的:

---
- hosts: php
  sudo: yes

  tasks:

  - name: install packages
    apt: name={{ item }} update_cache=yes state=latest
    with_items:
      - git
      - mcrypt
      - nginx
      - php5-cli
      - php5-curl
      - php5-fpm
      - php5-intl
      - php5-json
      - php5-mcrypt
      - php5-sqlite
      - sqlite3

  - name: ensure php5-fpm cgi.fix_pathinfo=0
    lineinfile: dest=/etc/php5/fpm/php.ini regexp='^(.*)cgi.fix_pathinfo=' line=cgi.fix_pathinfo=0
    notify:
      - restart php5-fpm
      - restart nginx

  - name: enable php5 mcrypt module
    shell: php5enmod mcrypt
    args:
      creates: /etc/php5/cli/conf.d/20-mcrypt.ini

  handlers:
    - name: restart php5-fpm
      service: name=php5-fpm state=restarted

    - name: restart nginx
      service: name=nginx state=restarted

最后,运行playbook:

ansible-playbook php.yml --ask-sudo-pass

我们的Web服务器主机上现在已经安装了所有需要的软件包,并完成了基本的系统配置。

步骤4:获取Git Repo

本章将把Laravel框架的repo给clone到Web服务器主机上。跟上一章一样,我先一步一步的说明,最后再给出完整的php.yml供复制粘贴。

在进行git repo的clone之前,先确认一下/var/www是否存在。这可以用file模块创建的任务来实现:

- name: create /var/www/ directory
  file: dest=/var/www/ state=directory owner=www-data group=www-data mode=0700

如上所述,我们需要用git模块来进行repo的拉取,整个进程只需要一个git clone命令所需的repo源地址。我们还需要定义clone的目标目录,并在目标目录已经存在该repo时让Ansible取消拉取(设置update=no)。Laravel的Git repo url是:https://github.com/laravel/laravel.git。

另外,我们需要以www-data用户来执行这个任务以确保权限的正确性,这就需要Ansible以sudo命令切换到另一个用户下执行此命令。这部分内容看起来是这样的:

- name: Clone git repository
  git: >
    dest=/var/www/laravel
    repo=https://github.com/laravel/laravel.git
    update=no
  sudo: yes
  sudo_user: www-data

注:如果是基于SSH的repo,SSH host的验证过程可能会干扰任务的执行。可以添加一个accept_hostkey=yes配置项来避免这一情况。

就是这样。现在打开php.yml开始复制粘贴:

nano php.yml

前面的我就不贴了,只把本章内容放进来,如下(记得把handler留在文件末尾):

...

  - name: enable php5 mcrypt module
    shell: php5enmod mcrypt
    args:
      creates: /etc/php5/cli/conf.d/20-mcrypt.ini

  - name: create /var/www/ directory
    file: dest=/var/www/ state=directory owner=www-data group=www-data mode=0700

  - name: Clone git repository
    git: >
      dest=/var/www/laravel
      repo=https://github.com/laravel/laravel.git
      update=no
    sudo: yes
    sudo_user: www-data

  handlers:
    - name: restart php5-fpm
      service: name=php5-fpm state=restarted

    - name: restart nginx
      service: name=nginx state=restarted

保存退出,运行之:

ansible-playbook php.yml --ask-sudo-pass

步骤5:用Composer创建应用

本章将使用Composer安装PHP应用以及其依赖项。

Composer有一个create-project命令,它可以安装所有需要的依赖项,并运行composer.json文件下post-create-project-cmd部分定义的项目创建动作。这可以确保应用安装的正确性。

我们可以用下面的这个Ansible任务来下载安装Composer到全局目录/usr/local/bin/composer。这样一来,访问这台云主机的其他人和应用也都可以使用Composer。

- name: install composer
  shell: curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
  args:
    creates: /usr/local/bin/composer

安装Composer之后,我们就可以使用Composer模块了。我们将告诉Composer我们的项目位置(working_dir参数),然后运行create-project命令。我们还需要添加optimize_autoloader=no参数,因为create-project命令不支持这个标记。跟git命令一样,我们需要用www-data用户来执行这个任务以确保权限正确。这部分内容看起来是这样的:

- name: composer create-project
  composer: command=create-project working_dir=/var/www/laravel optimize_autoloader=no
  sudo: yes
  sudo_user: www-data

注:create-project在一台刚建立的新主机上可能需要运行很久的时间,因为Composer缓存尚未建立,需要从头下载所有的东西。

就这样。现在打开php.yml文件开始复制粘贴……

nano php.yml

跟上一章一样,别忘了把handlers留在最后:

...

  - name: Clone git repository
    git: >
      dest=/var/www/laravel
      repo=https://github.com/laravel/laravel.git
      update=no
    sudo: yes
    sudo_user: www-data

  - name: install composer
    shell: curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
    args:
      creates: /usr/local/bin/composer

  - name: composer create-project
    composer: command=create-project working_dir=/var/www/laravel optimize_autoloader=no
    sudo: yes
    sudo_user: www-data

  handlers:
    - name: restart php5-fpm
      service: name=php5-fpm state=restarted

    - name: restart nginx
      service: name=nginx state=restarted

保存退出,运行playbook:

ansible-playbook php.yml --ask-sudo-pass

这儿有个问题:如果我们现在再运行一次Ansible,会发生什么事呢?

composer create-project会再运行一次。就Laravel而言,这会生成一个新的APP_KEY。所以,我们需要该任务仅在新clone之后运行一次。要实现这个效果,可以在git clone任务的运行结果上注册一个变量,然后在composer create-project任务里检查这个变量。如果git clone那儿变了,则运行composer create-project;否则,则跳过。

打开php.yml进行编辑:

nano php.yml

找到git clone的任务,在下面添加一个register选项,将任务执行的结果保存为cloned变量:

- name: Clone git repository
  git: >
    dest=/var/www/laravel
    repo=https://github.com/laravel/laravel.git
    update=no
  sudo: yes
  sudo_user: www-data
  register: cloned

再找到composer create-project任务,在下面添加一个when选项,检查cloned变量是否为“changed”:

- name: composer create-project
  composer: command=create-project working_dir=/var/www/laravel optimize_autoloader=no
  sudo: yes
  sudo_user: www-data
  when: cloned|changed

保存退出,运行playbook:

ansible-playbook php.yml --ask-sudo-pass

现在运行的Composer就不会改变APP_KEY了。

注:有些版本的Ansible的composer似乎有bug,会忽略脚本的执行,其输出是“OK”而不是“Changed”,但却不会安装依赖项。

步骤6:更新环境变量

本章将为应用更新一些环境变量。

Laravel有一个默认的.env文件,其中将APP_ENV设为local,APP_DEBUG设为true。我们需要把local改为production,将true改为false。这个需求同样可以用lineinfile模块来实现:

- name: set APP_DEBUG=false
  lineinfile: dest=/var/www/laravel/.env regexp='^APP_DEBUG=' line=APP_DEBUG=false

- name: set APP_ENV=production
  lineinfile: dest=/var/www/laravel/.env regexp='^APP_ENV=' line=APP_ENV=production

打开php.yml进行编辑:

nano php.yml

把上面的代码粘贴进来(handler部分还是在末尾):

...

  - name: composer create-project
    composer: command=create-project working_dir=/var/www/laravel optimize_autoloader=no
    sudo: yes
    sudo_user: www-data
    when: cloned|changed

  - name: set APP_DEBUG=false
    lineinfile: dest=/var/www/laravel/.env regexp='^APP_DEBUG=' line=APP_DEBUG=false

  - name: set APP_ENV=production
    lineinfile: dest=/var/www/laravel/.env regexp='^APP_ENV=' line=APP_ENV=production

  handlers:
    - name: restart php5-fpm
      service: name=php5-fpm state=restarted

    - name: restart nginx
      service: name=nginx state=restarted

保存退出,运行之:

ansible-playbook php.yml --ask-sudo-pass

lineinfile模块很适合做这种快速修改文本文件的工作,设置环境变量这种工作用它来做再好不过。

步骤7:设置Nginx

本章将配置Nginx用于服务我们的PHP应用。

现在如果你在浏览器里访问你的云主机IP http://your_server_ip/ ,你看到的是Nginx的默认页面,而不是我们的Laravel项目页面。这是因为我们的Nginx还没有被设置为从/var/www/laravel/public目录服务内容。这则设置需要更改Nginx的默认配置文件。另外,我们还需要添加php-fpm以让Nginx能够处理PHP脚本。

创建一个nginx.conf文件:

nano nginx.conf

把下面这些代码粘贴进去。有关Nginx配置的详细介绍可以参考这篇LNMP配置教程的第四章。以下内容设置了Laravel所在的公共目录,定义了Nginx使用的server_name跟我们之前在hosts文件中填写的hostname一致(通过inventory_hostname变量调用)。

nginx.conf

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /var/www/laravel/public;
    index index.php index.html index.htm;

    server_name {{ inventory_hostname }};

    location / {
        try_files $uri $uri/ =404;
    }

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /var/www/laravel/public;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

保存退出。

现在,我们用template模块推送上述配置文件。template模块跟copy模块看起来挺像,但两者之间有个关键的区别:copy在复制文件(一个或多个)的时候不进行任何变动,而template则会在复制文件(一个)的时候把所有的变量填进去。我们刚才在配置文件里用到了{{ inventory_hostname }}变量,所以当我们使用template模块时,该模块会把我们填写在hosts文件里的那个IP地址替换进来。这样就不用在配置文件里面进行硬编码了。

另外,因为我们更改了Nginx的配置,我们需要重启Nginx和php-fpm(编写任务的时候经常需要考虑到此类需求)。我们用notify来实现这一需求。

- name: Configure nginx
  template: src=nginx.conf dest=/etc/nginx/sites-available/default
  notify:
    - restart php5-fpm
    - restart nginx

就这样。现在再次打开我们的php.yml文件,开始复制粘贴:

nano php.yml

整个文件内容应该是这个样子的:

php.yml

---
- hosts: php
  sudo: yes

  tasks:

  - name: install packages
    apt: name={{ item }} update_cache=yes state=latest
    with_items:
      - git
      - mcrypt
      - nginx
      - php5-cli
      - php5-curl
      - php5-fpm
      - php5-intl
      - php5-json
      - php5-mcrypt
      - php5-sqlite
      - sqlite3

  - name: ensure php5-fpm cgi.fix_pathinfo=0
    lineinfile: dest=/etc/php5/fpm/php.ini regexp='^(.*)cgi.fix_pathinfo=' line=cgi.fix_pathinfo=0
    notify:
      - restart php5-fpm
      - restart nginx

  - name: enable php5 mcrypt module
    shell: php5enmod mcrypt
    args:
      creates: /etc/php5/cli/conf.d/20-mcrypt.ini

  - name: create /var/www/ directory
    file: dest=/var/www/ state=directory owner=www-data group=www-data mode=0700

  - name: Clone git repository
    git: >
      dest=/var/www/laravel
      repo=https://github.com/laravel/laravel.git
      update=no
    sudo: yes
    sudo_user: www-data
    register: cloned

  - name: install composer
    shell: curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
    args:
      creates: /usr/local/bin/composer

  - name: composer create-project
    composer: command=create-project working_dir=/var/www/laravel optimize_autoloader=no
    sudo: yes
    sudo_user: www-data
    when: cloned|changed

  - name: set APP_DEBUG=false
    lineinfile: dest=/var/www/laravel/.env regexp='^APP_DEBUG=' line=APP_DEBUG=false

  - name: set APP_ENV=production
    lineinfile: dest=/var/www/laravel/.env regexp='^APP_ENV=' line=APP_ENV=production

  - name: Configure nginx
    template: src=nginx.conf dest=/etc/nginx/sites-available/default
    notify:
      - restart php5-fpm
      - restart nginx

  handlers:
    - name: restart php5-fpm
      service: name=php5-fpm state=restarted

    - name: restart nginx
      service: name=nginx state=restarted

保存退出,运行之:

ansible-playbook php.yml --ask-sudo-pass

跑完后,进入浏览器看看你的云主机IP,应该能看到Laravel的项目页面啦!

总结

本文部署了一个公共repo的PHP应用。这对于学习Ansible的用法是足够了,然而在实际工作中,我们经常会需要与私有的git repo打交道,这会涉及SSH密钥验证的步骤(上述步骤3里提到过这个问题)。

你可以用Ansible来复制你的SSH密钥,放在git clone任务之前:

- name: create /var/www/.ssh/ directory
  file: dest=/var/www/.ssh/ state=directory owner=www-data group=www-data mode=0700

- name: copy private ssh key
  copy: src=deploykey_rsa dest=/var/www/.ssh/id_rsa owner=www-data group=www-data mode=0600

这样就可以正确的完成验证并部署应用了。

至此,你已经成功的在一台基于Ubuntu的Nginx服务器上部署了一个简单的PHP应用,并使用Composer管理起来所有依赖,而整个过程完全不用手动登入这台云主机!

本文来源自DigitalOcean Community。英文原文:How To Deploy a Basic PHP Application Using Ansible on Ubuntu 14.04 by Stephen Rees-Carter

翻译:lazycai

基于Jenkins+Git+Ansible 发布PHP 项目-------从小白到大神之路之学习运维第88天 阅读详情

相关推荐

如何使用 Ansible 在 Ubuntu 24.04 上安装和设置 LNMP

《使用Ansible在Ubuntu 24.04上自动化部署LNMP堆栈》摘要:本文详细介绍了如何通过Ansible自动化工具在Ubuntu服务器上部署LNMP(Linux/Nginx/MySQL/PHP)环境。主要内容包括:1) 准备工作,需配置Ansible控制节点和远程主机;2) 剧本功能说明,可实现自动化安装软件包、配置Nginx、设置MySQL安全及防火墙规则等操作;3) 提供完整的剧本结构、变量定义和Jinja2模板文件示例;4) 运行剧本后,服务器将自动完成LNMP环境搭建,通过访问指定URL可

介绍AWS Azure GCP devops Terraform 等技术 1471

ubuntu20+PHP项目运行环境搭建

ubuntu20+PHP项目运行环境搭建

可乐要加冰 1732

Ansible自动化部署LEMP:Ubuntu 18.04生产级配置实践

LEMP(Linux+Nginx+MySQL+PHP)是Web服务的核心技术栈,其环境配置涉及系统依赖、服务协同、权限控制与安全加固等多层技术原理。Ansible作为声明式配置管理工具,依托幂等性、模块化和SSH无代理架构,天然适配政企信创、教育平台等要求原生安装、审计可溯、批量可控的生产场景。相比Docker容器化或Shell脚本,Ansible在Ubuntu 18.04等LTS系统中能精准处理apt源结构、MySQL 5.7初始化、PHP 7.2扩展命名、Nginx Unix socket权限对齐等关键

505

Ansible的安装及简单使用

如果安装时采用,apt-get install去安装docker,则会因为无法键入y而是web主机组的apt-get install命令陷入死锁,从而导致无法更新和下载其他包。-i hosts web #指定我们ansible工具针对的是 hosts主机文件中的 web为我们刚才配置文件中的主机组。问题:ansible在执行shell命令的时候,如果该命令在执行的时候出现提示键入y回车继续之类的情况时,会使该命令陷入死锁。该配置文件的根路径。并且该模块是默认附加的,也就是说。如图,效果是一样的。

ζั͡山 ั͡有扶苏 ั͡✾的博客 1491

Ubuntu 14.04 + Ansible 自动化部署 WordPress 实战

WordPress 是最主流的开源内容管理系统,其自动化部署是 DevOps 工程师的核心实践能力之一;Ansible 作为无代理、YAML 驱动的配置管理工具,天然适合实现幂等、可审计、可复现的基础设施交付。在老旧但严苛的 Ubuntu 14.04 环境中开展部署,能深度暴露依赖管理、权限控制、服务生命周期与安全加固等底层问题——这正是理解 automation 本质的关键路径。本文聚焦 LAMP 栈原生部署(非容器)、Ansible 1.9.x 兼容性适配、WordPress 配置安全与数据库字符集校验

weixin_31155097的博客 258

Ansible在Ubuntu 18.04部署LEMP栈的生产级实践

LEMP栈(Linux+Nginx+MySQL+PHP)是Web服务的基础运行环境,其稳定部署依赖于系统状态的精确管控与跨版本兼容性保障。Ansible作为声明式自动化工具,通过幂等执行、变量抽象和模块化设计,将基础设施配置转化为可复现、可审计、可版本化的代码资产。相比Docker等容器方案,Ansible在老旧内核(如Ubuntu 18.04的4.15)上具备零运行时依赖、SSH直连、无需升级内核等独特优势,特别适用于金融、嵌入式及边缘场景中无法升级的存量系统。本文聚焦Ubuntu 18.04这一已结束生

weixin_34239169的博客 457

Ubuntu搭建PHP开发环境操作步骤(保姆级教程)

最近自购了一个阿里云服务器,系统镜像为Ubuntu 22.04 ,在编译安装LNMP(nginx+php+mysql)环境的时候,踩了不少坑,因此决定把自己安装的过程记录下来,以备后用。本篇文章基本上属于保姆级别的教程,只要你的系统也是Ubuntu,基本上无脑式复制粘贴运行,就能搭建起LNMP的环境。

码农兴哥的技术笔记 3073

Ubuntu 18.04下Ansible自动化部署Apache实战指南

Apache是广泛使用的开源Web服务器,其模块化架构与服务生命周期管理对自动化部署提出严格要求;Ansible作为主流配置管理工具,需深度适配目标发行版的包管理、服务控制与文件布局机制。在Ubuntu 18.04这一特定环境中,systemd 237、Apache 2.4.29、APT源策略及Python 3.6运行时共同构成关键约束条件——任何脱离该上下文的通用教程都易引发模块加载失败、服务重载中断或配置不生效等问题。技术价值在于实现幂等、可审计、可回滚的生产级部署;典型应用场景包括CI/CD流水线集成

weixin_34375251的博客 408

Ubuntu 14.04下用Ansible部署PHP应用的遗产系统加固实践

PHP应用部署涉及运行时环境、配置管理与持续运维三大核心环节;其底层原理依赖于Web服务器集成、INI配置加载顺序、扩展编译兼容性及权限控制模型。在老旧系统中,Ansible凭借无代理架构、幂等性设计和SSH原生支持,成为保障部署确定性与可追溯性的关键技术选择。它不追求版本最新,而聚焦于在内核锁定、源生态断层、权限受限等现实约束下,实现PHP配置精细化管控(如date.timezone三重覆盖)、MySQL表碎片自动化治理、图片目录ACL权限升级等高价值工程实践。本文即面向真实遗留环境,详解如何用Ansib

weixin_30271335的博客 389

Ansible自动化部署LAMP:Ubuntu 18.04老旧系统运维实战

LAMP(Linux+Apache+MySQL+PHP)是传统Web服务的基础技术栈,其部署与配置涉及多组件版本协同、安全加固及环境一致性等核心挑战。Ansible凭借无Agent架构、SSH原生通信、YAML声明式语法和强幂等性,成为老旧系统(如已EOL的Ubuntu 18.04)中实现可重复、可审计、低风险自动化运维的关键工具。它通过精确包版本锁定、Jinja2模板化配置、角色化代码结构和标准化安全加固流程,有效解决手动部署易错、Shell脚本难复用、环境漂移不可控等工程痛点。本文聚焦Ubuntu 18

weixin_30414305的博客 345

Ansible自动化部署LEMP:Ubuntu 18.04生产实践指南

LEMP(Linux+Nginx+MySQL+PHP)是现代Web服务的基础技术栈,其核心价值在于高性能、低资源占用与模块化架构;Nginx作为反向代理与静态资源服务组件,通过事件驱动模型显著优于传统Apache的进程/线程模型;而Ansible凭借无代理、YAML声明式语法和幂等性,成为实现LEMP环境标准化、可审计、可回滚部署的首选自动化工具。在Ubuntu 18.04这一广泛服役的EOL LTS版本上,需特别适配Python 2.7运行时、mysql-server-5.7包名变更及php-fpm Un

weixin_30691871的博客 380

Ansible一键部署Drupal 7.56到Ubuntu 14.04生产环境

Drupal是一款广泛使用的开源PHP内容管理系统,其部署涉及Web服务器、数据库、PHP运行时及权限配置等多层技术协同。Ansible作为主流自动化运维工具,通过声明式Playbook实现配置即代码,显著提升部署一致性与可重复性。在老旧但仍在金融、政务等关键场景服役的Ubuntu 14.04系统上,需精准适配Upstart服务管理、PHP 5.5.7兼容性、MySQL初始化顺序及Drupal 7.x LTS版本安全约束。本方案聚焦真实生产约束——不升级OS、不依赖新内核、不引入第三方源,以防御式编程保障数

weixin_33850890的博客 399

Ansible部署LAMP实战:Ubuntu 18.04避坑指南

LAMP(Linux+Apache+MySQL+PHP)是Web服务最基础的技术栈,其核心价值在于稳定、可控、低抽象的运行环境。理解LAMP原理需从Linux系统原生机制出发,依托配置管理工具实现确定性交付——而Ansible凭借无代理、YAML即代码、强幂等性等特点,成为Ubuntu等传统发行版上最契合的自动化方案。尤其在Python环境适配、systemd权限控制、UFW防火墙协同、debconf预置等关键环节,Ansible能精准穿透系统细节,规避因版本陈旧或配置错位导致的部署失败。本文聚焦真实生产场

weixin_33748818的博客 340

Ansible自动化部署Drupal 7到Ubuntu 14.04实战指南

Ansible是一种面向运维的配置管理与应用部署工具,其核心价值在于通过声明式YAML Playbook实现基础设施即代码(IaC),保障环境一致性、操作可审计与流程可复现。在老旧生产系统(如已EOL但仍在政务、医疗场景广泛使用的Ubuntu 14.04)上,Ansible能绕过容器化限制,直接管控apt包、Apache模块、MySQL权限及文件系统层级,显著降低人工误操作风险。结合Drupal 7.97这一最后兼容PHP 5.5的稳定版本,本方案提供轻量、安全、合规的落地路径,适用于物理服务器运维、离线环

450

Ubuntu 18.04 LEMP自动化部署:Ansible精准配置实战

LEMP(Linux+Nginx+MySQL+PHP)是主流Web运行环境,其稳定部署依赖对组件间依赖关系、权限模型与超时协同的深度理解。在Ubuntu 18.04等长期支持版本上,APT包管理器的依赖解析特性、MySQL密码验证策略、PHP-FPM进程内存模型及Nginx文件描述符限制共同构成典型‘脆弱性三角’。Ansible通过声明式配置实现状态收敛,规避手动操作中的顺序错误、权限遗漏与环境污染,尤其适合固定OS版本下的高确定性交付场景。本文聚焦Ubuntu 18.04 ESM生命周期内的LEMP部署实

weixin_30905981的博客 428

Ansible自动化部署Apache:Ubuntu 18.04生产级配置实践

Apache是Linux环境下最主流的Web服务器软件,其配置管理涉及安装、模块启用、虚拟主机定义、SSL集成与安全加固等多个技术环节。Ansible作为声明式基础设施即代码(IaC)工具,凭借无Agent架构、YAML可读语法和强幂等性,成为替代Shell脚本实现Apache自动化运维的工业级选择。它通过Playbook将配置固化为可版本控制、可重复执行、可审计回溯的代码单元,显著提升多环境(开发/测试/生产)部署一致性与可靠性。本文聚焦Ubuntu 18.04平台,深入解析Ansible在Apache安

cuiji1279的博客 402

Ansible自动化部署Apache:Ubuntu 18.04开箱即用实践

Apache是Linux环境下最主流的Web服务器软件,其配置管理涉及包安装、模块启用、虚拟主机设置、SSL集成与安全加固等多个技术层面。Ansible作为声明式基础设施即代码(IaC)工具,凭借幂等性、可审计性与跨节点一致性,成为标准化部署Apache的理想选择。尤其在长期支持(LTS)系统如Ubuntu 18.04上,其固定的Apache 2.4.29版本、Debian风格配置路径及Python 2.7运行时环境,对自动化工具的兼容性与精准控制提出明确要求。本文围绕Ansible Playbook设计原

weixin_33997389的博客 365

在Ubuntu上安装和配置PHP环境

安装完成后,你可以通过在Web浏览器中输入服务器的IP地址来验证Apache是否正常运行。如果你看到默认的Apache欢迎页面,说明安装成功。为了验证PHP是否在Apache中正确解析,我们可以创建一个简单的PHP脚本并在浏览器中运行它。如果一切正常,你应该能够在浏览器中看到PHP信息页面,其中包含有关PHP安装和配置的详细信息。这样就完成了在Ubuntu上安装和配置PHP环境的过程。首先,我们需要更新Ubuntu系统以确保安装的软件包是最新的。接下来,我们需要安装PHP及其相关的扩展。

ByteBuster的博客 2826
上一篇: 如何在Ubuntu 14.04之上安装Linux、Apache、MySQL与PHP(即LAMP)堆栈
下一篇: 如何在Ubuntu 14.04 LTS之上设置Nginx Server Blocks(即虚拟主机)
普通网友
博客等级 码龄10年 769粉丝 269原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值