Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Nächste ÜberarbeitungBeide Seiten der Revision
content:apache_phpfpm [2020/04/05 18:26] – [Tell Apache to use php-fpm] Danielcontent:apache_phpfpm [2020/09/26 04:50] – [Manage Database with phpMyAdmin] Daniel
Zeile 1: Zeile 1:
-====== Howto setup a LAMP-Server in 2018 ======+====== Kleiner Serverguide ====== 
 + 
 +===== Howto setup a LAMP-Server in 2018-2020 =====
  
 This documentation is about how to set up a LAMP- Server (Linux, Apache, MySql, PhP) in the current, most stable way. The Reason for me writing this is, that default Installations of common Distruibutions are often based on an old way in Server- Configuration, which is not the way it could be done today, leading to instability and complex configuration. This documentation is about how to set up a LAMP- Server (Linux, Apache, MySql, PhP) in the current, most stable way. The Reason for me writing this is, that default Installations of common Distruibutions are often based on an old way in Server- Configuration, which is not the way it could be done today, leading to instability and complex configuration.
  
-===== Choosing Installation-Media & Install Basic System =====+==== Choosing Installation-Media & Install Basic System ====
  
 First, starting from Windows, you should make shure to have enough harddisk- space free. Then get a installation-medium of the Linux your choice. I will stick to OpenSuSE as to get from [[https://software.opensuse.org/distributions|OpenSuSE]] (use Leap 15.0 currently as stable Distro. Tumbleweed may be instable). Follow the instructions to First, starting from Windows, you should make shure to have enough harddisk- space free. Then get a installation-medium of the Linux your choice. I will stick to OpenSuSE as to get from [[https://software.opensuse.org/distributions|OpenSuSE]] (use Leap 15.0 currently as stable Distro. Tumbleweed may be instable). Follow the instructions to
Zeile 12: Zeile 14:
   - Boot into new Linux and Set Up Desktop as you like   - Boot into new Linux and Set Up Desktop as you like
  
-===== Basic System- Scaling thoughts =====+==== Basic System- Scaling thoughts ====
  
 The most important thing to consider when making performant LAMP is to **not overextend memory-usage**  of your System. That means, that the amount of memory used by all Applications, should normally never exeed the system-memory space. If the settings are too high for your setup, the system will start to swap o lot of data, not working fast enough any more. As basic thumb-based Values, you need: 1 GByte Memory for Linux- Base- System 1 GByte Memory if you plan to have the graphical Desktop running (you can run that server in Textmode, which will not consume Memory) 1 GByte free (this will be used by System for filecache) The most important thing to consider when making performant LAMP is to **not overextend memory-usage**  of your System. That means, that the amount of memory used by all Applications, should normally never exeed the system-memory space. If the settings are too high for your setup, the system will start to swap o lot of data, not working fast enough any more. As basic thumb-based Values, you need: 1 GByte Memory for Linux- Base- System 1 GByte Memory if you plan to have the graphical Desktop running (you can run that server in Textmode, which will not consume Memory) 1 GByte free (this will be used by System for filecache)
Zeile 38: Zeile 40:
 Use "systemctl vm.swappiness = 0" and set it in /etc/sysctl.conf by adding line "vm.swappiness=0". Use "systemctl vm.swappiness = 0" and set it in /etc/sysctl.conf by adding line "vm.swappiness=0".
  
-===== Install MySql =====+==== Install MySql ====
  
 In OpenSuSE MariaDB is available and working out of the Box (maybe change the Admin- Password at first Start). MySQL is tuneable in /etc/my.cnf: In OpenSuSE MariaDB is available and working out of the Box (maybe change the Admin- Password at first Start). MySQL is tuneable in /etc/my.cnf:
Zeile 53: Zeile 55:
  
 Memory-Usage will be: innodb_buffer_pool_size + ( join_buffer_size + sort_buffer_size + readn_rnd_buffer_size ) * max_connections. If your System has more memory, use some tuning script (like MySQLTuner-perl) to see what makes most sense to put the memory to. Memory-Usage will be: innodb_buffer_pool_size + ( join_buffer_size + sort_buffer_size + readn_rnd_buffer_size ) * max_connections. If your System has more memory, use some tuning script (like MySQLTuner-perl) to see what makes most sense to put the memory to.
 +
 +For a local setup, you should use Sockets and disable networking. To do this, set <font inherit/monospace;;inherit;;#000000background-color:#ffffff;>"socket = /run/mysql/mysql.sock"</font> \\
 +You should than deactivate TCP/IP with "skip-networking" and comment out the bind-address.
  
 Start Mysql with "rcmysqld start" at the command line as root, it should work now. Start Mysql with "rcmysqld start" at the command line as root, it should work now.
  
-===== Install Apache =====+After that had worked you should secure your Database by giving a password as it was explained by the step above when starting it. If not shure just run "<font inherit/monospace;;inherit;;#000000background-color:#ffffff;>/usr/bin/mysql_secure_installation</font>"
 + 
 +==== Install Apache ====
  
 In SuSE 15.X the apache-prefork is installed by default as MPM, which means having one single Apache- Programm in memory. This is not very well scaleable (not multithreaded) and not very stable, as one hangig Request can stop the Server. In SuSE 15.X the apache-prefork is installed by default as MPM, which means having one single Apache- Programm in memory. This is not very well scaleable (not multithreaded) and not very stable, as one hangig Request can stop the Server.
Zeile 95: Zeile 102:
 I would suggest to remove any mpm-specific configurations and use only those settings. You can leave the other settings as defined by initial setup. I would suggest to remove any mpm-specific configurations and use only those settings. You can leave the other settings as defined by initial setup.
  
-===== Install PhP-FPM =====+==== Install PhP-FPM ====
  
 If installed, remove mod_php (see beneath)! The Module for apache is known to make it slow and instable - here we will set up PhP-FPM, which is much more stable and much faster. [[https://en.opensuse.org/SDB:Apache_FastCGI_and_PHP-FPM_configuration|Here]] you can find a good Documentation for changing to php-fpm, but we will extend them a bit. If installed, remove mod_php (see beneath)! The Module for apache is known to make it slow and instable - here we will set up PhP-FPM, which is much more stable and much faster. [[https://en.opensuse.org/SDB:Apache_FastCGI_and_PHP-FPM_configuration|Here]] you can find a good Documentation for changing to php-fpm, but we will extend them a bit.
Zeile 108: Zeile 115:
  
 </code> </code>
 +
   * I would suggest using a newer Version of php-fpm than in the default Repositories. E.g. using the Version of Repository "Apache Modules". Check out other "Experimental Packages" in [[https://software.opensuse.org/package/php7-fpm?search_term=php+fpm|https://software.opensuse.org/package/php7-fpm?search_term=php+fpm]]   * I would suggest using a newer Version of php-fpm than in the default Repositories. E.g. using the Version of Repository "Apache Modules". Check out other "Experimental Packages" in [[https://software.opensuse.org/package/php7-fpm?search_term=php+fpm|https://software.opensuse.org/package/php7-fpm?search_term=php+fpm]]
   * Either install the new Version with 1-Click-Install there **or**  for the default Version, use   * Either install the new Version with 1-Click-Install there **or**  for the default Version, use
Zeile 115: Zeile 123:
  
 </code> </code>
 +
   * Copy the configuration-files for php-fpm:   * Copy the configuration-files for php-fpm:
  
Zeile 122: Zeile 131:
  
 </code> </code>
 +
   * Than go to /etc/php7/fpm and briefly check if php-fpm.conf is ok for you   * Than go to /etc/php7/fpm and briefly check if php-fpm.conf is ok for you
   * Explanation: In php-fpm.d directory you need to set up at least one pool. This is one Instance for Apache to speak to.   * Explanation: In php-fpm.d directory you need to set up at least one pool. This is one Instance for Apache to speak to.
-  * This here is new for the setup: in "/etc/php7/fpm/php-fpm.d/www.conf" i do recommend setting "listen" to socket-file and not to ip. eg: listen = /var/run/php-fpm.sock - as long as your php and webserver resides on the same machine. Linux Sockets are much more faster. 
-  * If using sockets, make sure the path exists and is writeable by the apache- user (an that this mathces the user in www.conf for php-fpm) 
  
 The "pm"-setting in www.conf controls how much memory will be used at the end. Start with: The "pm"-setting in www.conf controls how much memory will be used at the end. Start with:
Zeile 135: Zeile 143:
   * pm.max_spare_servers = 18   * pm.max_spare_servers = 18
  
 +==== Using Sockets ====
 +
 +Whenever you can - you should use unix sockets instead of TCP/IP, because of less overhead. If you are on the same machine (apache and php-fpm), than you can.
 +
 +So this here is new for the setup: in "/etc/php7/fpm/php-fpm.d/www.conf" set
 +
 +<code>
 +listen = /var/run/php-fpm.sock
 +listen.owner = wwwrun
 +listen.group = www
 +listen.mode = 0660
 +
 +</code>
 +
 +You need to make the file be created by systemd, so create a file /usr/lib/tmpfiles.d/php-fpm.conf and paste this line there:
 +
 +<code>
 +d /run/php-fpm 0700 wwwrun root -
 +
 +</code>
  
 ==== PHP Configuration ==== ==== PHP Configuration ====
Zeile 150: Zeile 178:
 and check, if the socket-file has been created. and check, if the socket-file has been created.
  
-=== About PHP- Modules ===+==== About PHP- Modules ====
  
-many modules for PHP are offered in the Distrubution. I **would not recommend using those** - as all php-modules need to be compiled against your php. If you update PHP and your modules are the same, they may brake your PHP!+many modules for PHP are offered in the Distrubution. I **would not recommend using those**  - as all php-modules need to be compiled against your php. If you update PHP and your modules are the same, they may brake your PHP!
  
 Better use pearl / pecl and install modules with it! Here, i have found no other way, than to search for php-pear and php-pecl in the distribution and use them. Better use pearl / pecl and install modules with it! Here, i have found no other way, than to search for php-pear and php-pecl in the distribution and use them.
Zeile 160: Zeile 188:
 Which can be found in the Repo: [[https://build.opensuse.org/project/show/devel:languages:php|https://build.opensuse.org/project/show/devel:languages:php]] Which can be found in the Repo: [[https://build.opensuse.org/project/show/devel:languages:php|https://build.opensuse.org/project/show/devel:languages:php]]
  
-After that, modules can be installed by e.g. "pecl install imagick". They also need to be loaded in php.conf. I would make an new config named /etc/php7/conf.d/pear_pecl.conf and include they modules there. E.g. "extension=imagick.so"+After that, modules can be installed by e.g. "pecl install imagick". They also need to be loaded in php.conf. I would make an new config named /etc/php7/conf.d/pear_pecl.ini and include they modules there. E.g. "extension=imagick.so"
  
 Restart php-fpm for the changes and check the log of php-fpm (usually in /var/log/php-fpm.log) for errors when loading modules. Restart php-fpm for the changes and check the log of php-fpm (usually in /var/log/php-fpm.log) for errors when loading modules.
  
- +==== Tell Apache to use php-fpm ====
-===== Tell Apache to use php-fpm =====+
  
 For making Apache use php-fpm as php-server, you use the module "proxy_fcgi", which should be included in the apache MPM- Package. For making Apache use php-fpm as php-server, you use the module "proxy_fcgi", which should be included in the apache MPM- Package.
Zeile 172: Zeile 199:
  
   * To enable this and all its dependencies, use   * To enable this and all its dependencies, use
- 
 <code> <code>
 +
 sudo a2enmod setenvif rewrite proxy proxy_fcgi sudo a2enmod setenvif rewrite proxy proxy_fcgi
  
Zeile 205: Zeile 232:
  
 </code> </code>
-===== Start and check Apache =====+ 
 +==== Start and check Apache ====
  
 Now you can start and enable apache2 Now you can start and enable apache2
Zeile 211: Zeile 239:
  
 sudo systemctl start apache2 sudo systemctl start apache2
-sudo systemctl enable php-fpm+sudo systemctl enable apache2
  
 </code> </code>
Zeile 217: Zeile 245:
 check if the modules have beend loaded: check if the modules have beend loaded:
  
 +<code>
 apache2ctl -M apache2ctl -M
 +
 +</code>
  
 This should include proxy_fcgi_module now. This should include proxy_fcgi_module now.
  
-You are done. Now its up to you to fill Apache with content. Have fun!+==== Create a PHP- Test- File ==== 
 + 
 +Create the File /srv/www/htdocs/phpinfo.php (with read-permissions for user wwwrun) and paste this into it: 
 + 
 +<code> 
 +<?php 
 + 
 +// Show all information, defaults to INFO_ALL 
 +phpinfo(); 
 + 
 +?> 
 + 
 +</code> 
 + 
 +Now open your Web- Browser and go to: [[http://localhost/phpinfo.php|http://localhost/phpinfo.php]] 
 + 
 +This should give you the complete Info of your php-configuration. If something fails, check if the above services are started an/or the logfiles. 
 + 
 +In Production, you should not run a plain http-server, but switch to SSL. Therefore, you can get ssl-certificates from let's encrypt and follow the instructions there to switch to ssl. You need some internet Name like www.myname.com registered for your server to get this (e.g. via Dyndns). The process to make your server visible is something to be explained a bit more, but thats basically what you need to do (official internet-name/DNS- entry and ssl-encryption). as long as you don't want to make the server world-reachable and use it nly fr testing, your are also fine without DNS and SSL, but you should make sure, that your firewall blocks http(80) and https(443)-ports. 
 + 
 +Well: You are done. Now its up to you to fill Apache with content. Have fun! 
 + 
 +==== Manage Database with phpMyAdmin ==== 
 + 
 +To manage your local Database, it would be nice to have phpMyAdmin installed first (via Package-manager). After that, copy the config.sample.inc.php to config.inc.php under /srv/www/htdocs/phpMyAdmin to use the socket <font inherit/monospace;;inherit;;#000000background-color:#ffffff;>/run/mysql/mysql.sock</font> you specified before for mysql. 
 + 
 +You can finish the setup of your phpMyAdmin by visiting [[http://localhost/phpMyAdmin/index.php|http://localhost/phpMyAdmin/index.php]] 
 + 
 + 
 +===== Mein erstes php- Softwareprojekt =====
  
  
  • content/apache_phpfpm.txt
  • Zuletzt geändert: 2023/10/01 10:24
  • von Daniel