How to install wordpress on Ubuntu 16.04

Here is quick reference that I created for myselft for creating local wordpress blog installation. Hope it helps you as well.

  • Installation

Make sure you have following packages installed on your local machine

  1. MySQL (Please see post How to install MySQL on Ubuntu)
  2. NGINX (Please see post How to install nginx on Ubuntu)

Besides these, install following packages

sudo apt update
sudo apt install php php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip
sudo apt install php-mysql
sudo apt install php-fpm
  • Configure MySQL

Create user for wordpress

$mysql -u root -p
mysql> CREATE DATABASE localwordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
mysql> GRANT ALL ON localwordpress.* TO 'localwordpresssuser'@'localhost' IDENTIFIED BY 'password';
mysql> exit;
  • Download  WordPress.

curl -O
tar xzvf latest.tar.gz
cp wordpress/wp-config-sample.php wordpress/wp-config.php
mkdir wordpress/wp-content/upgrade
sudo cp -a wordpress  /var/www/wordpress1

After moving WordPress folder to required path, you need to change few folder permissions.

sudo chmod g+w /var/www/wordpress1/wp-content
sudo chmod -R g+w /var/www/wordpress1/wp-content/themes
sudo chmod -R g+w /var/www/wordpress1/wp-content/plugins
sudo chown -R www-data:www-data /var/www/wordpress1
  • Configure WordPress

Open wp-config.php file and make following changes

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'localwordpress');

/** MySQL database username */
define('DB_USER', 'localwordpresssuser');

/** MySQL database password */
define('DB_PASSWORD', 'password_here');

/** MySQL hostname */
define('DB_HOST', 'password');

/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8');

/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');

Visit following link for generate AUTH KEY and other remaining fields

simply copy paste values displayed on above link  into config.php file at appropriate location. Here is the sample. (Please don’t copy paste below values into your installation)

define('AUTH_KEY',         'Johd+fp5c.esU?J26hZb8^6Gi GAL+^Abs-{k4%g0G4IEGVKlZ`|MEk4B;W++%s*');
define('SECURE_AUTH_KEY',  '_J}pBRjcek6f+wj*BNF}lPu-xNX$^.+`nIx|*kg-YjY+v)%Qi<J`pI?|zE/BIa<U');
define('LOGGED_IN_KEY',    '2.T%wJpUwsSeZQV?K,R)7$u }yl]rfLt|.gg,uI.SP&U>u_7q+*uH2+Gy4}-AmYC');
define('NONCE_KEY',        '~^T R=oy/Ej`>q8&FP7rPM1vZ%;}*@oz7^b~~>>Clw{.LGYdbDjV$-t<U5/(&;M7');
define('AUTH_SALT',        'Nn?`[;?9=niA=Jun:ikXi(BR%%Y7MYVtMd+,a&_ZKQei3S ;Z8XteX{=f8~~=D~p');
define('SECURE_AUTH_SALT', 'WCRf7Un/.BX9z~_4dt}!-k$<Y02mm=fKEvHo;5{]!s9=w/x/@9-,Q?ib-jMM#47/');
define('LOGGED_IN_SALT',   '$~+K5U>rd3_B#+X*^G2hlBTnD:)W](rer%VMS #G8jJ^f(5Gr@.aF:6`hg~:OkS(');
define('NONCE_SALT',       'xdtH,{ir(-I5|/NIHaD^eFu.pKCIC-5!Gn`YBDq#?bRfhI5,-c,;?^^<6V%P04iD');

Also add FS_METHOD  after define ('WP_DEBUG', false); It should look as below

define('WP_DEBUG', false);
define('FS_METHOD', 'direct');
  • Troubleshooting

I got error “Authentication is needed to run ‘/bin/cp’ as the super user” while saving wp-config.php file.

Its not a big deal. Simply go to terminal and run following commands

sudo chmod 777 projectname
sudo chown $USER -R projectname/
  • Configure nginx

  • You need to configure nginx so that typed url will direct to correct installation directory. Following is the sample code. You can copy this as is but make sure you change the server_name parameter to your domain name.Create following file in folder /etc/nginx/sites-available/. You name is as you with but for easy reference, add name of domain in the file name.
    server {
            listen 80 default_server;
            listen [::]:80 default_server;
            # SSL configuration
            # listen 443 ssl default_server;
            # listen [::]:443 ssl default_server;
            # Note: You should disable gzip for SSL traffic.
            # See:
            # Read up on ssl_ciphers to ensure a secure configuration.
            # See:
            # Self signed certs generated by the ssl-cert package
            # Don't use them in a production server!
            # include snippets/snakeoil.conf;
            root /var/www/fintrekking;
            # Add index.php to the list if you are using PHP
            #index index.html index.htm index.nginx-debian.html;
            index index.php
            server_name _;
            location / {
                    # First attempt to serve request as file, then
                    # as directory, then fall back to displaying a 404.
                    try_files $uri $uri/ =404;
            # pass PHP scripts to FastCGI server
            location ~ \.php$ {
                    include snippets/fastcgi-php.conf;
                    # With php-fpm (or other unix sockets):
                    fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
            #       # With php-cgi (or other tcp sockets):
            #       fastcgi_pass;
            location /wp-admin/ {
                    index index.php;
                    try_files $uri $uri/ /index.php$args;
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #location ~ /\.ht {
            #       deny all;

    copy this file to sites-enabled folder using following command and restart nginx

    $sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/
    $sudo nginx -t
    $sudo systemctl restart nginx

    Considering we need to access local installation on custom url, that url need to point to localhost. This needs to be changed in host file.

    sudo nano /etc/hosts
  • Access your installation #
install wordpress ubuntu 16.04
install wordpress ubuntu 16.04

Hope this is helpful to you !

How to install phpmyadmin on Ubuntu 16.04

Follow following steps to install phpmyadmin

sudo apt-get update

sudo apt-get install phpmyadmin

Move folder to /var/www

sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin

create separate nginx file for this

server {
listen 80;
listen [::]:80;

root /var/www/phpmyadmin;
index index.html index.htm index.nginx-debian.html;


location / {
#try_files $uri $uri/ =404;
# original content
try_files $uri /index.php$is_args$args;
#try_files $uri $uri/ /index.php$is_args$args;

# pass the PHP scripts to FastCGI server listening on
location ~ \.php$ {
include snippets/fastcgi-php.conf;

# With php7.0-cgi alone:
# With php7.0-fpm:
fastcgi_pass unix:/run/php/php7.0-fpm.sock;

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#location ~ /\.ht {
# deny all;


Check nginx syntax error and restart nginx

sudo nginx -t

sudo systemctl restart nginx

Add an entry to your host file located at sudo nano /etc/hosts



and now when you access, it will open phpmyadmin

Getting started with laravel with Ubuntu 16.04

Laravel is a flexible and lightweight open source PHP framework with Model-View Controller (MVC) design pattern. Laravel makes application development very fast and you can make highly scalable application development using Laravel.

Before installing Laravel you need to install composer

Install composer
php -r "copy('', 'composer-setup.php');"  
php -r "if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"  
php composer-setup.php  
php -r "unlink('composer-setup.php');"  

This will install it locally. Now move it to path folder

$mv composer.phar /usr/local/bin/composer
Install Laravel

You can download Laravel using composer as below.

$ composer global require "laravel/installer=~1.1"
Changed current directory to /home/conquistador/.config/composer  
./composer.json has been created
Loading composer repositories with package information  
Updating dependencies (including require-dev)  
Package operations: 10 installs, 0 updates, 0 removals  
  - Installing symfony/process (v3.4.6): Downloading (100%)         
  - Installing psr/log (1.0.2): Downloading (100%)         
  - Installing symfony/debug (v3.4.6): Downloading (100%)         
  - Installing symfony/polyfill-mbstring (v1.7.0): Downloading (100%)         
  - Installing symfony/console (v3.4.6): Downloading (100%)         
  - Installing guzzlehttp/promises (v1.3.1): Downloading (100%)         
  - Installing psr/http-message (1.0.1): Downloading (100%)         
  - Installing guzzlehttp/psr7 (1.4.2): Downloading (100%)         
  - Installing guzzlehttp/guzzle (6.3.0): Downloading (100%)         
  - Installing laravel/installer (v1.3.4): Downloading (100%)         
symfony/console suggests installing symfony/event-dispatcher ()  
symfony/console suggests installing symfony/lock ()  
Writing lock file  
Generating autoload files  

Once installation is completed you can create a new app using following command.

$laravel new firstapp

While creating an app, I got following error.

$laravel new firstapp
In NewCommand.php line 42:
  The Zip PHP extension is not installed. Please install it and try again.  

new [--dev] [--5.2] [--] [<name>]  

To get rid of this error, you need to install php7.0. You can install it using following command.

$sudo apt-get install php7.0-zip 

Once php7.0 is installed, previous error got resolved but I got another error

$ laravel new firstapp
Crafting application...  
Loading composer repositories with package information  
Installing dependencies (including require-dev) from lock file  
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - This package requires php ^7.1.3 but your PHP version (7.0.25) does not satisfy that requirement.

checking current version

l$ php -v  
PHP 7.0.25-0ubuntu0.16.04.1 (cli) ( NTS )  
Copyright (c) 1997-2017 The PHP Group  
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies  
    with Zend OPcache v7.0.25-0ubuntu0.16.04.1, Copyright (c) 1999-2017, by Zend Technologies

To resolve this error, install php7.0-zip.

laravel new firstapp

In NewCommand.php line 42:

  The Zip PHP extension is not installed. Please install it and try again.  

new [--dev] [--5.2] [--] [<name>]  
sudo apt-get install php7.0-zip  

After installation of php7.0-zip, I received another error.

laravel new firstapp  
Crafting application...  
Loading composer repositories with package information  
Installing dependencies (including require-dev) from lock file  
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for erusev/parsedown 1.7.1 -> satisfiable by erusev/parsedown[1.7.1].
    - erusev/parsedown 1.7.1 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
  Problem 2
    - Installation request for laravel/framework v5.6.9 -> satisfiable by laravel/framework[v5.6.9].
    - laravel/framework v5.6.9 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
  Problem 3
    - Installation request for phar-io/manifest 1.0.1 -> satisfiable by phar-io/manifest[1.0.1].
    - phar-io/manifest 1.0.1 requires ext-dom * -> the requested PHP extension dom is missing from your system.
  Problem 4
    - Installation request for phpunit/php-code-coverage 6.0.1 -> satisfiable by phpunit/php-code-coverage[6.0.1].
    - phpunit/php-code-coverage 6.0.1 requires ext-dom * -> the requested PHP extension dom is missing from your system.
  Problem 5
    - Installation request for phpunit/phpunit 7.0.2 -> satisfiable by phpunit/phpunit[7.0.2].
    - phpunit/phpunit 7.0.2 requires ext-dom * -> the requested PHP extension dom is missing from your system.
  Problem 6
    - Installation request for theseer/tokenizer 1.1.0 -> satisfiable by theseer/tokenizer[1.1.0].
    - theseer/tokenizer 1.1.0 requires ext-dom * -> the requested PHP extension dom is missing from your system.
  Problem 7
    - laravel/framework v5.6.9 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
    - laravel/tinker v1.0.4 requires illuminate/console ~5.1 -> satisfiable by laravel/framework[v5.6.9].
    - Installation request for laravel/tinker v1.0.4 -> satisfiable by laravel/tinker[v1.0.4].

To get ride of latest errors, you can install following two packages.

$sudo apt-get install php-mbstring 
$sudo apt-get install php-xml

After installation of above two packages I got another errors.

Generating optimized autoload files  
> @php -r "file_exists('.env') || copy('.env.example', '.env');"

  Script "post-install-cmd" is not defined in this package

To resolve this new error, run following command.

$composer global update

after running this command, run create application command again.

laravel new firstapp  
Crafting application...  
Loading composer repositories with package information  
Installing dependencies (including require-dev) from lock file  
Package operations: 70 installs, 0 updates, 0 removals  
  - Installing doctrine/inflector (v1.3.0): Loading from cache
  - Installing doctrine/lexer (v1.0.1): Loading from cache
  - Installing dragonmantank/cron-expression (v2.0.0): Loading from cache
  - Installing erusev/parsedown (1.7.1): Loading from cache
  - Installing vlucas/phpdotenv (v2.4.0): Loading from cache
  - Installing symfony/css-selector (v4.0.6): Loading from cache
  - Installing tijsverkoyen/css-to-inline-styles (2.2.1): Loading from cache
  - Installing symfony/polyfill-php72 (v1.7.0): Loading from cache
  - Installing symfony/polyfill-mbstring (v1.7.0): Loading from cache
  - Installing symfony/var-dumper (v4.0.6): Loading from cache
  - Installing symfony/routing (v4.0.6): Loading from cache
  - Installing symfony/process (v4.0.6): Loading from cache
  - Installing symfony/http-foundation (v4.0.6): Loading from cache
  - Installing symfony/event-dispatcher (v4.0.6): Loading from cache
  - Installing psr/log (1.0.2): Loading from cache
  - Installing symfony/debug (v4.0.6): Loading from cache
  - Installing symfony/http-kernel (v4.0.6): Loading from cache
  - Installing symfony/finder (v4.0.6): Loading from cache
  - Installing symfony/console (v4.0.6): Loading from cache
  - Installing egulias/email-validator (2.1.3): Loading from cache
  - Installing swiftmailer/swiftmailer (v6.0.2): Loading from cache
  - Installing paragonie/random_compat (v2.0.11): Loading from cache
  - Installing ramsey/uuid (3.7.3): Loading from cache
  - Installing psr/simple-cache (1.0.1): Loading from cache
  - Installing psr/container (1.0.0): Loading from cache
  - Installing symfony/translation (v4.0.6): Loading from cache
  - Installing nesbot/carbon (1.23.0): Loading from cache
  - Installing monolog/monolog (1.23.0): Loading from cache
  - Installing league/flysystem (1.0.43): Loading from cache
  - Installing laravel/framework (v5.6.9): Loading from cache
  - Installing fideloper/proxy (4.0.0): Loading from cache
  - Installing jakub-onderka/php-console-color (0.1): Loading from cache
  - Installing nikic/php-parser (v3.1.5): Loading from cache
  - Installing jakub-onderka/php-console-highlighter (v0.3.2): Loading from cache
  - Installing dnoegel/php-xdg-base-dir (0.1): Loading from cache
  - Installing psy/psysh (v0.8.17): Loading from cache
  - Installing laravel/tinker (v1.0.4): Loading from cache
  - Installing fzaninotto/faker (v1.7.1): Loading from cache
  - Installing hamcrest/hamcrest-php (v2.0.0): Loading from cache
  - Installing mockery/mockery (1.0): Loading from cache
  - Installing filp/whoops (2.1.14): Loading from cache
  - Installing nunomaduro/collision (v2.0.0): Loading from cache
  - Installing webmozart/assert (1.3.0): Loading from cache
  - Installing phpdocumentor/reflection-common (1.0.1): Loading from cache
  - Installing phpdocumentor/type-resolver (0.4.0): Loading from cache
  - Installing phpdocumentor/reflection-docblock (4.3.0): Loading from cache
  - Installing phpunit/php-token-stream (3.0.0): Loading from cache
  - Installing sebastian/version (2.0.1): Loading from cache
  - Installing sebastian/resource-operations (1.0.0): Loading from cache
  - Installing sebastian/recursion-context (3.0.0): Loading from cache
  - Installing sebastian/object-reflector (1.1.1): Loading from cache
  - Installing sebastian/object-enumerator (3.0.3): Loading from cache
  - Installing sebastian/global-state (2.0.0): Loading from cache
  - Installing sebastian/exporter (3.1.0): Loading from cache
  - Installing sebastian/environment (3.1.0): Loading from cache
  - Installing sebastian/diff (3.0.0): Loading from cache
  - Installing sebastian/comparator (2.1.3): Loading from cache
  - Installing phpunit/php-text-template (1.2.1): Loading from cache
  - Installing doctrine/instantiator (1.1.0): Loading from cache
  - Installing phpunit/phpunit-mock-objects (6.0.1): Loading from cache
  - Installing phpunit/php-timer (2.0.0): Loading from cache
  - Installing phpunit/php-file-iterator (1.4.5): Loading from cache
  - Installing theseer/tokenizer (1.1.0): Loading from cache
  - Installing sebastian/code-unit-reverse-lookup (1.0.1): Loading from cache
  - Installing phpunit/php-code-coverage (6.0.1): Loading from cache
  - Installing phpspec/prophecy (1.7.5): Loading from cache
  - Installing phar-io/version (1.0.1): Loading from cache
  - Installing phar-io/manifest (1.0.1): Loading from cache
  - Installing myclabs/deep-copy (1.7.0): Loading from cache
  - Installing phpunit/phpunit (7.0.2): Loading from cache
symfony/var-dumper suggests installing ext-intl (To show region name in time zone dump)  
symfony/routing suggests installing doctrine/annotations (For using the annotation loader)  
symfony/routing suggests installing symfony/config (For using the all-in-one router or any loader)  
symfony/routing suggests installing symfony/dependency-injection (For loading routes from a service)  
symfony/routing suggests installing symfony/expression-language (For using expression matching)  
symfony/routing suggests installing symfony/yaml (For using the YAML loader)  
symfony/event-dispatcher suggests installing symfony/dependency-injection ()  
symfony/http-kernel suggests installing symfony/browser-kit ()  
symfony/http-kernel suggests installing symfony/config ()  
symfony/http-kernel suggests installing symfony/dependency-injection ()  
symfony/console suggests installing symfony/lock ()  
egulias/email-validator suggests installing ext-intl (PHP Internationalization Libraries are required to use the SpoofChecking validation)  
paragonie/random_compat suggests installing ext-libsodium (Provides a modern crypto API that can be used to generate random bytes.)  
ramsey/uuid suggests installing ext-libsodium (Provides the PECL libsodium extension for use with the SodiumRandomGenerator)  
ramsey/uuid suggests installing ext-uuid (Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator)  
ramsey/uuid suggests installing ircmaxell/random-lib (Provides RandomLib for use with the RandomLibAdapter)  
ramsey/uuid suggests installing moontoast/math (Provides support for converting UUID to 128-bit integer (in string form).)  
ramsey/uuid suggests installing ramsey/uuid-console (A console application for generating UUIDs with ramsey/uuid)  
ramsey/uuid suggests installing ramsey/uuid-doctrine (Allows the use of RamseyUuidUuid as Doctrine field type.)  
symfony/translation suggests installing symfony/config ()  
symfony/translation suggests installing symfony/yaml ()  
monolog/monolog suggests installing aws/aws-sdk-php (Allow sending log messages to AWS services like DynamoDB)  
monolog/monolog suggests installing doctrine/couchdb (Allow sending log messages to a CouchDB server)  
monolog/monolog suggests installing ext-amqp (Allow sending log messages to an AMQP server (1.0+ required))  
monolog/monolog suggests installing ext-mongo (Allow sending log messages to a MongoDB server)  
monolog/monolog suggests installing graylog2/gelf-php (Allow sending log messages to a GrayLog2 server)  
monolog/monolog suggests installing mongodb/mongodb (Allow sending log messages to a MongoDB server via PHP Driver)  
monolog/monolog suggests installing php-amqplib/php-amqplib (Allow sending log messages to an AMQP server using php-amqplib)  
monolog/monolog suggests installing php-console/php-console (Allow sending log messages to Google Chrome)  
monolog/monolog suggests installing rollbar/rollbar (Allow sending log messages to Rollbar)  
monolog/monolog suggests installing ruflin/elastica (Allow sending log messages to an Elastic Search server)  
monolog/monolog suggests installing sentry/sentry (Allow sending log messages to a Sentry server)  
league/flysystem suggests installing league/flysystem-aws-s3-v2 (Allows you to use S3 storage with AWS SDK v2)  
league/flysystem suggests installing league/flysystem-aws-s3-v3 (Allows you to use S3 storage with AWS SDK v3)  
league/flysystem suggests installing league/flysystem-azure (Allows you to use Windows Azure Blob storage)  
league/flysystem suggests installing league/flysystem-cached-adapter (Flysystem adapter decorator for metadata caching)  
league/flysystem suggests installing league/flysystem-eventable-filesystem (Allows you to use EventableFilesystem)  
league/flysystem suggests installing league/flysystem-rackspace (Allows you to use Rackspace Cloud Files)  
league/flysystem suggests installing league/flysystem-sftp (Allows you to use SFTP server storage via phpseclib)  
league/flysystem suggests installing league/flysystem-webdav (Allows you to use WebDAV storage)  
league/flysystem suggests installing league/flysystem-ziparchive (Allows you to use ZipArchive adapter)  
league/flysystem suggests installing spatie/flysystem-dropbox (Allows you to use Dropbox storage)  
league/flysystem suggests installing srmklive/flysystem-dropbox-v2 (Allows you to use Dropbox storage for PHP 5 applications)  
laravel/framework suggests installing aws/aws-sdk-php (Required to use the SQS queue driver and SES mail driver (~3.0).)  
laravel/framework suggests installing doctrine/dbal (Required to rename columns and drop SQLite columns (~2.6).)  
laravel/framework suggests installing guzzlehttp/guzzle (Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).)  
laravel/framework suggests installing league/flysystem-aws-s3-v3 (Required to use the Flysystem S3 driver (~1.0).)  
laravel/framework suggests installing league/flysystem-cached-adapter (Required to use Flysystem caching (~1.0).)  
laravel/framework suggests installing league/flysystem-rackspace (Required to use the Flysystem Rackspace driver (~1.0).)  
laravel/framework suggests installing league/flysystem-sftp (Required to use the Flysystem SFTP driver (~1.0).)  
laravel/framework suggests installing nexmo/client (Required to use the Nexmo transport (~1.0).)  
laravel/framework suggests installing pda/pheanstalk (Required to use the beanstalk queue driver (~3.0).)  
laravel/framework suggests installing predis/predis (Required to use the redis cache and queue drivers (~1.0).)  
laravel/framework suggests installing pusher/pusher-php-server (Required to use the Pusher broadcast driver (~3.0).)  
laravel/framework suggests installing symfony/dom-crawler (Required to use most of the crawler integration testing tools (~4.0).)  
laravel/framework suggests installing symfony/psr-http-message-bridge (Required to psr7 bridging features (~1.0).)  
psy/psysh suggests installing ext-pdo-sqlite (The doc command requires SQLite to work.)  
psy/psysh suggests installing hoa/console (A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit.)  
filp/whoops suggests installing whoops/soap (Formats errors as SOAP responses)  
sebastian/global-state suggests installing ext-uopz (*)  
phpunit/phpunit-mock-objects suggests installing ext-soap (*)  
phpunit/php-code-coverage suggests installing ext-xdebug (^2.6.0)  
phpunit/phpunit suggests installing ext-xdebug (*)  
phpunit/phpunit suggests installing phpunit/php-invoker (^2.0)  
Generating optimized autoload files  
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
> @php artisan key:generate
Application key [base64:gsajasdasjhasdjkkjdash=] set successfully.  
> IlluminateFoundationComposerScripts::postAutoloadDump
> @php artisan package:discover
Discovered Package: fideloper/proxy  
Discovered Package: laravel/tinker  
Discovered Package: nunomaduro/collision  
Package manifest generated successfully.  
Application ready! Build something amazing.  

And there you go. You can see, application is ready statement. You can start the application using following command.

$ php artisan serve
Laravel development server started: <>  
[Thu Mar  8 23:29:29 2018] [200]: /favicon.ico

Once done, visit to access the application.

Getting started with django with python3 and ubuntu

Tag line for django says “The web framework for perfectionists with deadlines.” and most would agree. django is rediculously fast to implement, its fully loaded with lots of utilitis, its secure and at the same time its highly scalable. some of the most popular sites like instagram, pinterest are built with django.

Let us get our hands dirty by getting started with django instead of talking about django features.

Which django version should I use ?

Here are the details about djnago release. you can choose latest version, however, I will stick with LTS version

Which Python version should I use ?

This is the most common question and following table with clarify your query

Django version Python versions
  1.11 2.7, 3.4, 3.5, 3.6
  2.0 3.4, 3.5, 3.6, 3.7
  2.1,2.2 3.5, 3.6, 3.7

In this tutorial we are going to use python version 3.6 (3.6.4 to be very specifuc) and latest django version 3.0.1


If you want to install specific version use following

$ pip3 install Django==3.0.1

Alternative way to install Django is as below

$ sudo python3 -m pip install django
Collecting django  
  Downloading Django-X.X.X-py3-none-any.whl (7.1MB)
    100% |████████████████████████████████| 7.1MB 186kB/s 
Requirement already satisfied: pytz in /usr/local/lib/python3.6/site-packages (from django)  
Installing collected packages: django  
Successfully installed django-X.X.X  

Checking the installed version

Simple way to check is using below command

$python3 -m django --version

another way

~$ python3
Python 3.6.4 (default, Jan 13 2018, 12:02:51)  
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.  
>>> import django
>>> print django.get_version()
  File "<stdin>", line 1
    print django.get_version()
SyntaxError: invalid syntax  
>>> print(django.get_version())

Creating django project

Project is created using following command

$django-admin startproject mysite

This will create folder mysite having required files. Now let us start the application by running server.

$ python3 runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python migrate' to apply them.

December 28, 2019 - 07:55:49
Django version 3.0.1, using settings 'mysite01.settings'
Starting development server at
Quit the server with CONTROL-C.  

Now your website is up and running

By default server status at port 8000. You can change port using following command

$python3.6 runserver 8080

Creating an app

The term application describes a Python package that provides some set of features. Applications may be reused in various projects. The term project describes a Django web application. The project Python package is defined primarily by a settings module, but it usually contains other things.Applications include some combination of models, views, templates, template tags, static files, URLs, middleware, etc. They’re generally wired into projects with the INSTALLED_APPS setting and optionally with other mechanisms such as URLconfs, the MIDDLEWARE setting, or template inheritance.

$ python3 startapp polls

This will create a sub-directory as below

├── mysite01
│   ├── db.sqlite3
│   ├──
│   ├── mysite01
│   │   ├──
│   │   ├──
│   │   ├── __pycache__
│   │   │   ├── __init__.cpython-36.pyc
│   │   │   ├── settings.cpython-36.pyc
│   │   │   ├── urls.cpython-36.pyc
│   │   │   └── wsgi.cpython-36.pyc
│   │   ├──
│   │   ├──
│   │   └──
│   └── polls
│       ├──
│       ├──
│       ├──
│       ├── migrations
│       │   └──
│       ├──
│       ├──
│       └──

Now to have our very basic application working, let us create file under folder polls and add below code

from django.urls import path
from . import views

app_name = 'polls'
urlpatterns = [
    # ex: /polls/
    path('', views.index, name='index'),
    path('first/', views.first, name='first'),

Please note “/’ after “first” url name.

We have updated url structure now let us code the view to be displayed if these urls are accessed. Update following code in polls/

from django.shortcuts import render
from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

def first(request):
    context = "Test Data"
    return render(request, 'polls/first.html', {'context': context})

As you see, we are displaying very basic message. This will give you basic idea about hor urls and views work. Now before you run the server again we need to inform our project about the application ‘polls’ by updating file. Update following in


Also update main project to include polls/ any url starting with domain-name+polls will be served from ‘polls/’

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('polls/',  include('polls.urls')),

Now let us run the server again

$ python3 runserver

Now you can access this website at below path